题目链接
题目大意
有一个 n ( 3 ≤ n ≤ 3 ⋅ 1 0 5 ) \ n(3\leq n\leq 3\ ·10^5) n(3≤n≤3 ⋅105)个点 m ( 3 ≤ 5 ⋅ 1 0 5 ) \ m(3\leq 5\ ·10^5) m(3≤5 ⋅105)条边的简单无向图,需要将每个顶点染为红绿蓝三种颜色之一。然后对于每条边,若其两个端点颜色一样,则边也变成对应颜色,否则保持黑色。
基础目标为:
- 仅有黑边的情况下,图依旧保持联通。
在完成基础目标的前提下,还可以完成以下额外目标:
1.每种颜色顶点数相同。(保证 n n n 是 3 3 3 的倍数)
2.某种颜色的顶点数最多,但该颜色的节点的相邻边都是黑色。这个额外目标可以达成多次。
如下所示,左图是染色前,右图是按某种方式染色后的结果,其满足基础目标,每种颜色的顶点数相同,绿色节点出现次数最多且相邻边均为黑色,因此满足两个额外条件。
给定未染色的图,求至少满足一个额外目标的方案,或判断无解。
题解
我们先考虑基础目标,由题意得在相邻两个节点颜色不同的情况下是满足的。
我们先用两种不同的颜色填充整个图形,在奇数层用绿色,在偶数层用蓝色。
考虑第一种额外情况:当绿色和蓝色数量大于 n 3 \frac{n}{3} 3n我们可以在整张图上修改任意个节点标为红色,使三种颜色到达平衡。这时我们只要考虑红色的节点相互之间不矛盾即可,简单的贪心。
修改过程中从底部出发,可以尽可能减少冲突。
当绿色和蓝色数量有一个小于 n 3 \frac{n}{3} 3