ICPC World Finals 2024 Astana

E. Flipping Container

先 dfs 枚举开始的 \(O(1)\) 步操作,这时 \(x,y\) 分别有一个集合,满足可以任意做 \(x\to x+S_i,x\to x-S_i\) 操作。

然后对于 \(x,y\) 分开做,转化成一个最短路问题。可以同余最短路。

G. Kindergarten

转化一下限制,每个 \(i\) 需要满足以下之一:

  1. \(b_i\to i\)
  2. \(i\to c_i\to b_i\)

先把所有点设成第一种,如果 \(b_i\) 没有环就做完了。但是肯定有环,所以就要选一些点变成第二种限制(称这种操作为反转)。

下面建一张图,连 \(i\to b_i\) 为黑边,\(i\to c_i\) 为红边。

枚举环上的一个点 \(u\),考虑 \(u\to c_u\to b_{c_u}\cdots\) 的路径,如果 \(c_u\) 不断走黑边不会经过 \(b_u\),那么就做完了(只需要反转 \(u\))。

否则,在 \(c_u\) 不断走黑边,走到某一个点 \(x\) 的时候,必须跳红边走到 \(c_x\),然后从 \(c_x\) 继续跳黑边。而 \(c_x\) 跳黑边跳到的点需要满足不能经过 \(b_x\)(这里只需要限制 \(b_x\),不需要限制 \(b_u\))。

最后我们要找的就是一个 \(\rho\) 型路径,满足:

  1. 环的起始位置在 \(b_i\) 的基环树的环上。
  2. 环的部分至少有一条红边。
  3. 每跳一条红边 \(u\to c_u\),接下来从 \(c_u\) 开始跳黑边,这一段连续的黑边不能经过 \(b_u\)

枚举基环树的环上的一个点当起始点 \(u\),从 \(u\) 开始先走一条红边,然后 dfs。

dfs 过程中,我们优先考虑走黑边,如果能走回 \(u\) 且不经过 \(b_u\),那过程就结束了。

否则,红边 \(c_u\) 一定走进了 \(b_u\) 的子树里。

此时从 \(c_u\) 开始继续走黑边,如果走到一个点 \(x\),满足 \(c_x\) 跳出了 \(b_x\) 的子树,就结束了。

dfs 过程中,如果找到一个存在红边的环,就可以构造了:将所有 \(u\to v\) 的红边的 \(u\) 反转,其他不反转。


其他题摆了

posted @ 2025-04-26 17:10  Rainbow_qwq  阅读(303)  评论(0)    收藏  举报