【题解】CF1444C 二分图判定 分治思想

二分图判定:一个图是二分图等价于可以被二染色等价于没有奇数环。

定理:连通二分图染色的方案有且仅有两种(颜色互换)。

因为一个图是二分图的必要条件是不存在奇数环,因此考虑一个类型对 \((a,b)\) 的导出子图是二分图的必要条件是类型 \(a\) 的点是二分图,且类型 \(b\) 的点是二分图。

若一个类型对 \((a,b)\) 间没有任何边且 \(a\) , \(b\) 的导出子图均是二分图,那么点对 \((a,b)\) 一定是二分图,因此我们要考虑的点对实际上是 \(O(m)\) 级别的。 (通过特殊性质使其规模下降,即只考虑两个集合间的约束是 \(O(m)\) 级别的。)

考虑一个类型对 \((a,b)\) 构成的导出子图的 “类间边”。

二分图技巧:用状态定义二分图中的颜色与连通块颜色反转

考虑二分图判定的第二种方法——染色法,考虑对于两个不同类二分图连通分量来说,存在边 \((u,v)\)\(u\) 的颜色与 \(v\) 的颜色相同,那么对于这两个连通分量来说,存在且存在一个连通分量需要对内部的染色反转(黑变白,白变黑),若不同则需要这两个连通分量内部的染色同时反转或同时不反转。

即:新二分图的染色方案一定是若干个原来的连通分量内部染色反转得到的。

考虑建立一张新图,点集为点对 \((a,b)\) 不考虑 “类间边” 的连通分量,用颜色定义图中点的 “状态”,若该连通分量需要对其颜色翻转则为黑色,如果不需要则为白色。

二分图建图技巧:给定若干个约束要求 a,b 一定在 / 不在同一个集合

\(u,v\) 的状态强制不同则连边 \((u,v)\) ,若强制相同则连边 \((u,newnode),(newnode,v)\)

直接染色判断新图是不是二分图即可。

总的复杂度为 \(O(n + m\log m)\)

posted @ 2021-08-30 23:24  Themaxmaxmax  阅读(35)  评论(0编辑  收藏  举报