20230724练习总结
CF627F
这个题的题面翻译其实就已经把做法提示得很明显了。
每一次操作相当于是把 \(0\) 移动到相邻的节点上。
考虑不加边,那接判断 \(0\) 移到后是否相同即可。
现在要加一条边,可以先把 \(0\) 移动到位,判断是否相等。可以观察到如果加一条边影响的应该是一个环——顺移一个位置。
于是可以找到需要改变的点,如果和 \(0\) 一起无法构成一条路径则无解,否则将初始路径上那部分减掉再加上多出来的部分就是答案。
CF1726D Tree Elimination
树上的计数题树形 dp 肯定是要在考虑范围内的,如果树形 dp 做不了就考虑推式子。
理解一下题意,就是找擦除标记的方案数。考虑树形 dp,设 \(f_{u,0/1/2/3}\) 表示 \(u\) 被父边之前的边消除 / 被父边消除 / 被父边之后的边消除 / 未被消除。
若 \(u\) 不被父边消除,即 \(f_{u,0/2}\),那么假设消除 \(u\) 的边对应的儿子为 \(v\),有:
-
\(v\) 不能在 \((u,v)\) 之前被消除,即 \(f_{v,2/3}\)。
-
对于 \((u,w)\) 在 \((u,v)\) 之前的 \(w\in son(u)\),\((u,w)\) 不能消除 \(u\),所以 \(w\) 必须被父边消除,即 \(f_{w,1}\)。
-
对于 \((u,w)\) 在 \((u,v)\) 之后的 \(w\in son(u)\),\((u,w)\) 已经无法再消除点,所以 \(w\) 无法被父边消除,即 \(f_{w,0/2/3}\)。
若 \(u\) 被父边消除,即 \(f_{u,1}\)。
-
对于 \((u,v)\) 再 \(u\) 父边之前的 \(v\in son(u)\),\(v\) 必须在 \((u,v)\) 之前被消除,即 \(f_{v,0/1}\)。
-
对于 \((u,v)\) 再 \(u\) 父边之后的 \(v\in son(u)\),\(v\) 已经无法被父边 \((u,v)\) 消除,即 \(f_{v,0/2/3}\)。
若 \(u\) 未被消除,则 \(\forall v\in son(u)\) 都要被父边消除或在父边之前被消除,即 \(f_{v,0/1}\)。