2021牛客多校#8 C-Fuzzy Graph(构造)

题目链接

点击传送入队友家

题目大意

有一个   n ( 3 ≤ n ≤ 3   ⋅ 1 0 5 ) \ n(3\leq n\leq 3\ ·10^5)  n(3n3 105)个点   m ( 3 ≤ 5   ⋅ 1 0 5 ) \ m(3\leq 5\ ·10^5)  m(35 105)条边的简单无向图,需要将每个顶点染为红绿蓝三种颜色之一。然后对于每条边,若其两个端点颜色一样,则边也变成对应颜色,否则保持黑色。
基础目标为:

  • 仅有黑边的情况下,图依旧保持联通。

在完成基础目标的前提下,还可以完成以下额外目标:
1.每种颜色顶点数相同。(保证 n n n 3 3 3 的倍数)
2.某种颜色的顶点数最多,但该颜色的节点的相邻边都是黑色。这个额外目标可以达成多次。
如下所示,左图是染色前,右图是按某种方式染色后的结果,其满足基础目标,每种颜色的顶点数相同,绿色节点出现次数最多且相邻边均为黑色,因此满足两个额外条件。
在这里插入图片描述
给定未染色的图,求至少满足一个额外目标的方案,或判断无解。

题解

我们先考虑基础目标,由题意得在相邻两个节点颜色不同的情况下是满足的。
我们先用两种不同的颜色填充整个图形,在奇数层用绿色,在偶数层用蓝色。
考虑第一种额外情况:当绿色和蓝色数量大于 n 3 \frac{n}{3} 3n我们可以在整张图上修改任意个节点标为红色,使三种颜色到达平衡。这时我们只要考虑红色的节点相互之间不矛盾即可,简单的贪心。
修改过程中从底部出发,可以尽可能减少冲突。
当绿色和蓝色数量有一个小于 n 3 \frac{n}{3} 3

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值