CF23E - Tree
题意
给定一棵树,删除若干条边,求连通块大小之积的最大值是什么
题解
实际上这题有两种做法。一个是贪心,一个是动规,但是我只会DP做法。
设状态为 $dp[u][j]$ 表示与 $u$ 相连的连通块大小为 $j$ 的答案(这里的连通块大小是包裹 $u$ 本身的)。
然后整个子树的答案我们存在 $dp[u][0]$ 里,因为我们发现这个状态实际上是没有实际含义的。
接下来考虑转移,我们枚举一个合并好的前缀,然后往两边分配大小。另外这里合并两个答案的大小统计要留到最后,这是为了防止状态的混淆。
细节看代码。
另外有一个超级大坑,就是转移的顺序,一定要从大的往小的转移,因为要防止数据被覆盖qwq。
代码
1 | void Dfs(int u, int fa) { |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 祝馀宫!
评论