Link
轻车熟路,独立A掉,Cool!
Solution
可以注意到,每个点对答案的贡献取决于它到它的祖先中离它最近的伐木场的距离。按照套路,设计状态表示在以为根的子树内,建了个伐木场,点到最近的伐木场距离为,这棵子树对答案的最小贡献。
笼统地说是距离,但是直接表示是不好表示的。所以就做个转化,相当于离散化,用表示最近的伐木场的深度,这样也可以很方便地转移。
于是考虑的转移。
通过观察,可以得到一个性质:一个点,与它的任意子节点,要么相同,要么,即上建了伐木场。你说这个还叫性质?不是一眼秒的东西嘛。好吧当我没说
然后就可以分情况讨论转移了。
然后这里又涉及背包的合并,我想当然地写完,发现输出。
最后发现,一开始设置的合法状态的和任何的值取min都是它本身。苦思冥想得不到结果,最后得出的结论是要求用最小代价把背包填满的多重背包不能用滚动数组。。(如果可以的话还请指教)
Code
1 | //Code by Lucida |