AGC006F

由于操作完后变成了三元环,因此考虑三染色

对于点 $u$,若存在边 $u\rightarrow v$,那么 $c_v\equiv c_u+1\pmod 3$

然后对一个弱联通块分四种情况讨论:染一种颜色,染两种颜色,染三种颜色,不支持染色

前两种情况非常好处理,不会有新加的边,因为在染色合法的情况下 $u\rightarrow v\rightarrow w$ 必定推出三种颜色

第三种情况,每种颜色必定仅向颜色为 $+1\bmod 3$ 的所有点连边,定义一个边的顺序使得任意一个前缀的边都是弱联通的,依次加入归纳证明即可

第四种情况,沿用第三种情况的证明方式,必有一个时刻当前加入的边不符合染色,那么可以推出完全图,此时无论再加入什么边都会保持完全图。

染色用 bfs 即可

AGC005E

首先有比较显然的结论,如果当前先手能比后手先到达一条边,这条边满足两端点在后手树上的距离 $\ge 3$,那么显然可以无限循环

然后假设当前无法比后手先到达这样的边

那么以最初后手位置为根,最优策略下先手必定时时刻刻在后手子树内,否则,假设有一次跳出了子树,那么必定为 $u\rightarrow v\rightarrow w$,从 $w$ 跳到了$u$,而此时后手在 $v$,显然不优。

由于每时每刻先手都在后手的子树中,所以每次后手朝着先手走一定是最优策略,

那么,最优策略一定是走到最初后手的位置的子树里,深度最大的先手能比后手先到达的位置。

AGC007E

首先很显然的想法是套个二分,把问题转化成判定性问题。

然后可设 dp 状态 $f_{u,i,j}$ 表示对于点 $u$ 进入的那条路径到底部的距离是 $i$,出来的那条路径到 $u$ 的距离是 $j$ 是否可行,很显然这具有单调性,因此对于每个 $i$ 记录 $\min\left(j\right)$ 即可,每个 $u$ 的状态数最坏是 $\mathcal{O}\left(子树大小\right)$

此时对于每个点可以直接 two-pointers 合并,但是暴力合并复杂度过高,数据结构维护过于复杂。考虑优化

由于若存在 $i_0,i_1$ 使得对应的 $j_0,j_1$ 满足 $i_0\le i_1$,$j_0= j_1$ 只要保留前面一组,因此合并完后的状态数是 $\min\left(siz_L,siz_R\right)$ 的,总复杂度 $\mathcal{O}\left(n\log_2n\log_2v\right)$

没有发现合并完后的状态数这一条性质导致只会数据结构暴力处理。

文章目录