UR #19
清扫银河 如果只进行 1 操作,不难证明存在操作序列的充要条件是将所有 1 边拿出来,所有点的度数为偶数,构造方案使用欧拉回路。 因为不存在重边,所以进行 1 操作时每个环环长一定大于 2,因此如果存在一个只有 1 操作的合法操作序列,这个序列的最短长度不大于 \(\lfloor \frac{m}{3} \rfloor\) 。 然后考虑 2 操作能为 1 操作做些什么。 首先可以发现性质:在一次 2 操作中将集合 \(S\) 中的点变白、其余点变黑进行翻转,等价于对 \(S\) 中的每一个点 \(x\) 将 \(x\) 变白其余点变黑进行一次翻转。 那么可以只考虑每次只有一个点翻转的情况。那么每一个点至多翻转 \(1\) 次。某个点翻转一次会导致与这个点直接相连的所有点 1 边数量的奇偶性产生变化,还会根据当前点度数对当前点 1 边数量的奇偶性产生变化。 考虑使用 0/1 异或方程描述。设 \(f_i\) 表示第 \(i\) 个点是否翻转, \(d_i\) 表示 \(i\) 点度数, \(p_i\) 表示初始态下 \(i\) 点连接的 \(1\) 边数量的奇偶性,那么有异或方程: \[\sum\limits_{(u,v) \in e}f_v \oplus [2 \not\mid d_u] f_u = p_u \] 如果该方程有解,注意到如果两个点直接相连,可以把它们的翻转操作合并