树形 DP 选做
P8867 [NOIP2022] 建造军营
Hint:边双缩点;DP 不好转移则考虑更强的限制.
非常厉害的计数题.
先考虑如果一个子图如果删去任意一条边都不会影响连通性,那么这个子图就可以随便建造军营与看守道路,方案数是容易计算的. 于是边双缩点,无向图变成一棵树.
考虑树上 DP. 朴素的思路是设 \(f_{u,0/1}\) 表示在 \(u\) 子树内建或不建军营的方案数,但是发现这样分类讨论情况很多,并且算重了很多东西. 考虑钦定所有建造了军营的点都沿着看守的道路与 \(u\) 联通. 这下转移就变得很明朗了:
系数是看守/不看守缩点后树上的道路.
考虑 \(f_u\) 初值,设缩点后边双联通分量内点数为 \(v_u\),边数为 \(e_u\),有:
最后考虑统计答案. 由于限制加强了,最后答案的统计就要更加细致. 一个重要的观察是对于 \(f_{u,0/1}\),如果子树外所有道路随便看不看守,\((u,fa_u)\) 这条道路在统计 \(f_{fa_u,0/1}\) 时可能算重,因为转移钦定也可能看守这条道路;如果钦定不选父亲这条边,方案数就不重不漏. 记子树中边数之和为 \(sum_u\),答案即:
P11363 [NOIP2024] 树的遍历
不会换根 DP,咕咕咕
CF1060F Shrinking Tree
Hint:考虑在状态中钦定从哪条边开始有贡献.
考虑点 \(rt\) 为根时的答案,容易发现只有删与 \(rt\) 相连的几条边时会对答案产生影响,删其余边不会产生影响. 而当某个儿子 \(v\) 合并到 \(rt\) 后,原来 \(v\) 的几个儿子与 \(rt\) 合并时就必须保留 \(rt\),会对 \(rt\) 答案产生影响. 对一般的情况,决定转移至关重要的一个状态是 \(u\) 的儿子 \(v\) 是否合并到 \(u\),以及 \(u\) 是否合并到 \(fa_u\),我们将在设计状态时着重考察这两点.
考虑设 \(f_{u,i}\) 表示只考虑子树 \(u\),钦定子树内删去了 \(i\) 条边之后,删去 \(i+1\) 条边之前 \(u\) 的答案开始被儿子影响;为了方便,记 \(g_{u,i}\) 表示子树 \(u\) 并上 \((u,fa_u)\) 这条边后的答案.
我们想要把 \(g_{v,j}\) 的答案合并到子树 \(u\),若当前子树 \(u\) 的答案为 \(f_{u,i}\),由于两者删边边集不交,未删边边集也不交,

浙公网安备 33010602011771号