Loading

CF2147H Maxflow GCD Coloring

这个最大流和整除结合起来有点太超前了,我们考虑寻找切入点。

首先我们把最大流转化成最小割,不难发现问题等价,但是还是做不了。

我们可以思考一些关于答案的性质,首先能作为 \(\gcd\) 的数太多不好控制,与最小割结合起来难如登天,我们不妨尝试令分的组都被 \(2\) 整除。另外在观察样例发现样例答案最多只有 \(2\) 组,我们不妨考虑能否只分成两组构造。

首先先用最小割树把只有一种的情况判掉,转化完最小割后我们把偶数边直接删掉就好了,但是我们不能把所有奇数边边权视为 \(1\),因为我们的限制是最小割,我们直接考虑把最小条件去掉,对于任意割的限制比最小割更少,还更容易刻画。

我们思考让任意割满足条件的充要条件。考虑最小割的一个意义是将图分成两个集合 \(S,T\),那么割就是 \(S,T\) 之间的边。将其刻画到数上,在 \(S\)\(x_u=0\),否则 \(x_u=1\),那么我们发现一条边的贡献恰好是 \(x_u\oplus x_v\)\(\oplus\) 显然是异或,然后我们要满足最后结果一定为 \(0\)

我们发现如果要满足则需要每个 \(x_u\) 被抵消,于是充要条件自然是这张图每个点的度数为偶数。

接下来是高妙的归纳构造,感觉能大胆猜出答案最多只有两组后直接归纳构造的都是大神,不过现在想想其实感受起来答案确实不大。

首先对于每个点度数都是偶数的图显然可以直接构造。

否则,找出其中一个奇数点 \(u\)。如果你思考了一下就会发现你没办法直接将它的选择影响刻画到图上,也就是说不好归纳。考虑分步刻画影响。我们发现 \(u\) 的邻域中与 \(u\) 在同集合的点,在删去 \(u\) 的子图中结束时度数为奇数,注意到 \(u\) 的度数是奇数,那么考虑将 \(u\) 邻域之间边的状态反转递归进入子问题,然后对于 \(u\) 邻域所在的两个集合中 \(u\) 邻域点数为偶数的集合,我们发现它们其实恰好就是原图中去掉 \(u\) 后度数为奇数的点,直接把 \(u\) 塞进这个集合即可。

posted @ 2025-09-30 15:13  lalaouye  阅读(11)  评论(0)    收藏  举报