
树形dp
Tao_oc
加油
展开
-
树的最大独立集
例题1:hdu1520:http://acm.hdu.edu.cn/showproblem.php?pid=1520题意:给一颗树,给各个结点的权值,选择若干结点,结点之间不能直接相连,求结点的最大权值和(即任意结点之间没有父子关系)解析:树的最大独立集合,在树上dp操作,选了该结点,就一定不能选该结点的子节点dp[i][0]表示以i为根的树,不选该根结点的权值最大和...原创 2018-08-14 10:42:36 · 486 阅读 · 0 评论 -
树的重心
树的重心有下面几条常见性质:定义1:找到一个点,其所有的子树中最大的子树节点数最少,那么这个点就是这棵树的重心。定义2:以这个点为根,那么所有的子树(不算整个树自身)的大小都不超过整个树大小的一半。性质1:树中所有点到某个点的距离和中,到重心的距离和是最小的;如果有两个重心,那么他们的距离和一样。性质2:把两个树通过一条边相连得到一个新的树,那么新的树的重心在连接原来两个树的重心的路径上...原创 2019-04-09 21:12:35 · 293 阅读 · 0 评论 -
树形dp题集
Binary Apple Tree题意:树枝上间连接着一些苹果,给定留下m根树枝,问最后剩下的最多苹果是多少解析:树上背包,要求一定要选1,选择的物品要连通把树枝上的苹果赋到子节点上.先求子树最大点数,然后遍历求值,要从大到小背包求结果dp[u][j]代表以u为根结点,选取j个子节点的树的权值和.dp[u][j]=max(dp[u][j],dp[u][j-k]+dp[v...原创 2019-07-29 10:27:18 · 313 阅读 · 0 评论 -
E. Tree Painting(树形dp换根)
题意:给定一棵树,树上每个节点都是白色.操作:可以选择一个节点涂黑,然后加上它的子节点的数目的值(包括自身)直到涂满整棵树,求能获得的最大值解析:树形dp换根,两个dfs第一个dfs求各节点的子节点数目,第二个dfs换根,每次换相邻节点的为根.siz(v)是为根的节点子节点数,n-siz(v)是是v->u方向的子节点数,即siz(u)sum(v)=sum(u)...原创 2019-07-19 20:33:32 · 487 阅读 · 0 评论 -
树的直径
树的直径是树形结构上距离最长的路径树的直径一些性质:1.与树上任意一点x最远的点一定是直径的两端2.在树上找到一点,其他点到这个点的距离最大值最小,最大值=直径/2+直径%23.任选一点,找到最远的点,该点必是直径一端,从该点找最远的另一点,另一点必是直径的另一端4.树上:最短欧拉路=2*树的所有边长和-树的直径由1->3解析:方法1:直接求出直径的两端,...原创 2018-08-17 16:45:40 · 622 阅读 · 1 评论 -
树形dp学习
树的重心树的直径树的最大独立集E. Tree Painting(树形dp换根)1:给出一棵树 每个节点有权值 要求父节点和子节点不能同时取 求能够取得的最大值 (hdu1520)2:给出一棵树,求离每个节点最远的点的距离(hdu2196)3:1>在一个地图上,有N座城堡,每座城堡都有一定的宝物,在每次游戏中允许攻克M个城堡并获得里面的宝物。但由于 ...原创 2019-07-28 14:49:10 · 189 阅读 · 0 评论 -
分治
点分治树上距离<=k的点对数目ac:#include<cstdio>#include<iostream>#include<cstring>#include<algorithm>#include<cmath>#define MAXN 20005using namespace std;int k,root,...原创 2019-04-07 22:46:08 · 109 阅读 · 0 评论