CF741C
有 \(2n\) 个人围成一圈坐在桌子边上,每个人占据一个位子,对应这 \(2n\) 个人是 \(n\) 对情侣,要求情侣不能吃同一种食物,并且桌子上相邻的三个人的食物必须有两个人是不同的,只有两种食物,问一种可行分配方式。
思路: 我们在两个点之间连边,表示他们吃的不一样。然后对于点对 \((x,y)\),连边 \(x\) 和 \(y\)。对于相邻 \(3\) 个人吃的食物不同的限制,可以直接将其强化,在 \(2i-1\) 和 \(2i\) 之间连边,可以直接保证相邻 \(3\) 个人吃的食物不同.
如何保证这样的正确性?我们需理解连出来的图一定是二分图。二分图有个性质,如果这个图不是二分图的话,那么就一定有奇环,如果没有,就一定是二分图。任何一个环都是由若干条情侣边和若干条 \((2i-1,2i)\) 边互相交错而成,所以不存在奇环。
P10936
一个入侵者 \(a\) 被第 \(b\) 号塔的第 \(c\) 次导弹袭击中,可以连边 \(a\to (b,c)\)。
因为有时间的限制,显然不能连接 \(a\to (b,+∞)\)。因为时间具有单调性,时间越多,入侵者就越能被消灭。则二分时间 \(mid\),若第 \(b\) 号塔的第 \(c\) 次导弹的发射时间小于等于 \(mid\),则连边。
最后看每一个入侵者是否被一个点对 \((b,c)\) 所连接,即可以采用二分图匹配。
CF1354E
先对图进行二分图染色。
- 染白色的点填入 \(2\),染黑色的点填入 \(1/3\)。
- 染黑色的点填入 \(2\),染白色的点填入 \(1/3\)
对于一个联通块来说,\(2\) 的数量等于黑点数量或者白点数量,二选一。因为总的 \(2\) 的数量限制为 \(n_2\),定义 \(f_{i,j}\) 代表前 \(i\) 个联通块,有 \(j\) 个 2 是否可行。背包即可。
考虑输出方案。先把每个联通块的 \(2\) 填了,这可以根据 dp 值确定。最后剩下的 \(1/3\) 直接随便加入即可。
CF1012B
考虑建立一个二分图,左边为行的编号,右边为列的编号。若 \((x,y)\) 存在标记,则连接 \(x\) 和 \(y\)。
考虑这个标记如何变化:\((r_1,c_1)+(r_1,c_2)+(r_2,c_1)\to (r_2,c_2)\),容易发现在此过程中二分图联通块数量不变。且一个联通的二分图,将在有限次操作下,变成一个完全二分图。现在只需要考虑加多少条边使整体二分图变的联通。答案就是联通块个数减一。