参考资料

题目大意.

给出一个二分图,你要给边染色,使同色边不相邻。求最小色数并构造一组方案。

……其实你不需要使色数最小,设最小色数为 C,你只要构造一个色数为 2log2C 的方案即可。

nL,nR105,m5×105

时限 6s。

首先,显然地 C 肯定有上界 maxdeg。然后……做了这么多图论题你还不清楚套路吗?没错,它同时也是下界。

证明. (为什么 maxdeg 就是最小色数)

可见,如果我们能找出一组互不相邻的边集 S,使得 G/S 中每个点的度数都 maxdeg1 就可以根据归纳法证完了。

考虑左部点(下记为 VL)中达到 maxdeg 的点集 VLmVLm 到右部点 VR 必有一完美匹配(根据 Hall 定理,如果此结论不成立,右部必存在一个度数 >maxdeg 的点,这是不可能的)。对右部点有类似结论。

现在考虑这两个匹配的并 S。显然 S 中可能有相邻边,相邻边构成的连通块要么是路径要么是偶环。

  • 如果是奇路径,保留较多的一半边;
  • 如果是偶路径 / 偶环,任意保留一半数量的边。

不难验证,这就构造了一个合法的 S

当然,每次求两遍匹配必然是不可接受的,所以要注意利用 2log2C 的性质。知道 C=maxdeg 后,大致思路就很明显了:每次试图把边集分为两半,并让每一半中的最大度数 C/2

具体来说,一旦发现有两条边相邻于点 u 就强制让它们的颜色相反,并认为 u 不具有这两条邻边(所以每个点总是最多只有一条邻边,也就最多余下一个未"消掉"的度数)。并查集维护一下就好。顺便,由于环总是偶环,不需要担心非树边。