dp Trick 之:别样的合并转移(未完成)
能够解决的问题
小部分树上选点问题:选一个点前必须选到根的路径上的所有点,要求选点序列满足性质。且选点的顺序有一些贪心性质(如果选点时不考虑到根路径,即有贪心最优解)。
优缺点
- 区分度大。
- 太过专一。
思路
这类题的易错点:当进入一个子树时,不一定选完整个子树,可能选一点就退出。
我们考虑一点一点合并:我们把当前贪心最优点与它的父亲合并(注意,此时他的父亲并不一定被选),变成新点,直到只剩一个连通块。
证明:如果当前贪心最优点可以选则一定会选,所以选父亲等价于选他。
例题与代码
题
小明有一个棋盘,这个棋盘是一棵以1为根,\(n\)个节点的树,节点编号依次为\(1,2,3,\cdots,n\)。
每个节点上有一颗黑子/白子。
这个棋盘有一定的限制,每次我们想要拿出棋子,我们必须把棋子移到根节点,再在根节点处将棋子拿出,放到棋盒中。换句话说,想要移走棋子,必须先移走他到根节点上所有的棋子。
棋盒是一个序列的结构,棋子必须按移走的顺序一颗一颗依次放入棋盒的末尾。
小明希望将棋子转移到棋盒后棋盒中的棋子序列尽可能规整。他对规整进行了定义:他认为黑子是0,白子是1,将棋子序列转换为01序列后,逆序对的个数越少,越规整。
现在他想知道最小的逆序对数量。
把 \(1\) 节点与他子树内的包含他的 \(0\) 连通块当作一个点,包含 \(0\) 的个数越多,贪心优先级越高,然后跑 Trick 即可。
code