树dp
Mima_Reincarnation
这个作者很懒,什么都没留下…
展开
-
20160804 最长链 树分治?树DP?
题目大意:给一颗树,求每个节点到其他所有节点的距离中最大的使用DFS序和节点size维护一个点的子树,对于每个节点,只考虑过这个点的路径,则可以用最长子链更新所有非最长链所在子树的所有节点,用次长子链更新最长链所在子树的所有节点。注意,为防止只有一条链,每个节点ans值的初值应是深度(向上一条链)或最长子链(向下一条链)中大的。然后返回最长子链的长度(要加上父节点到他的边权)以留给他的父亲决定最长子原创 2016-08-08 18:46:09 · 513 阅读 · 0 评论 -
BZOJ1131 [POI2008]Sta 树DP
题目大意:给出一个N个点的树,找出一个点来,以这个点为根的树时,所有点的深度之和最大 考虑一个点向其儿子转移对答案的影响。该子树内所有点深度-1,除该子树外的点深度+1,所以随便选一个根,预处理出深度和,然后全都转移一遍就可以。 自己的代码:#include<cstdio> #include<algorithm> #define gm 1000001 using namespace std原创 2016-12-26 21:01:54 · 465 阅读 · 0 评论 -
BZOJ4543: [POI2014]Hotel加强版 长链剖分
给一个树,问有多少三元组满足两两距离相等。n<=100000 长链剖分应用之一:o(n)统计以深度为下标的可合并子树信息 在当前节点,令f(i)表示相对深度为i的节点个数,g(i)表示在子树外离当前点距离为i的点可以和子树内多少对点组成答案。 每次新来一个儿子,枚举长度,用当前g和儿子f以及当前f和儿子g更新一遍答案,然后用两边的f来更新g,再将儿子的f和g推入当前f和g。注意顺序问题。原创 2017-04-11 17:42:01 · 1535 阅读 · 0 评论