随笔分类 -  树形dp

摘要:考虑树的部分分怎么做。令f[i]为i向子树内走的期望路径长度,转移比较显然。算答案时先把其父亲的答案弄好就可以统计自己的答案了。 环套树也类似。树里直接dp,对环上点暴力考虑环上的每条路径,算完后再在树里统计答案。 说起来不是很难。事实上想清楚了也确实不是很难。 不明白为什么不管啥题我都能把代码写的 阅读全文
posted @ 2018-09-12 19:59 Gloid 阅读(217) 评论(0) 推荐(0)
摘要:根据组合意义,有nk=ΣC(n,i)*i!*S(k,i) (i=0~k),即将k个有标号球放进n个有标号盒子的方案数=在n个盒子中选i个将k个有标号球放入并且每个盒子至少有一个球。 回到本题,可以令f[i][j]表示ΣC(dis(i,k),j) (k为i子树中节点),通过C(i,j)=C(i-1,j 阅读全文
posted @ 2018-08-29 13:03 Gloid 阅读(195) 评论(0) 推荐(0)
摘要:要求最大值最小容易想到二分答案。首先对每个点求出子树中与其最远的距离是多少,二分答案后就可以标记上一些必须在所选择路径中的点,并且这些点是不应存在祖先关系的。那么如果剩下的点数量>=3,显然该答案不可行;=0,显然可行;=1,由该点沿其到根的路径往上爬,并计算最远距离判断是否合法;=2,求出两点lc 阅读全文
posted @ 2018-08-27 22:01 Gloid 阅读(187) 评论(0) 推荐(0)
摘要:令f[i]表示i子树内最少染色次数,加上012状态分别表示该子树内叶节点已均被满足、存在黑色叶节点未被满足、存在白色叶节点未被满足,考虑i节点涂色情况即可转移。事实上贪心也可以。 阅读全文
posted @ 2018-08-27 18:51 Gloid 阅读(143) 评论(0) 推荐(0)
摘要:相当于给树上的每个点分配一个编号使父亲和儿子间都有连边。 于是可以考虑树形dp:设f[i][j][k]为i号点的编号为j,其子树中编号集合为k的方案数。转移显然。然而复杂度3n·n3左右,具体我也不知道是多少,但肯定跑不过。 如果状态有集合的话不管怎样底数都是3了,考虑能不能变成2。完全不能可以想到 阅读全文
posted @ 2018-08-12 14:39 Gloid 阅读(174) 评论(0) 推荐(0)