【树形dp】 bzoj1131 Sta】的更多相关文章

1131: [POI2008]Sta Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1150  Solved: 378[Submit][Status][Discuss] Description 给出一个N个点的树,找出一个点来,以这个点为根的树时,所有点的深度之和最大 Input 给出一个数字N,代表有N个点.N<=1000000 下面N-1条边. Output 输出你所找到的点,如果具有多个解,请输出编号最小的那个. Sample Input…
题目描述 给出一个N个点的树,找出一个点来,以这个点为根的树时,所有点的深度之和最大 输入 给出一个数字N,代表有N个点.N<=1000000 下面N-1条边. 输出 输出你所找到的点,如果具有多个解,请输出编号最小的那个. 样例输入 8 1 4 5 6 4 5 6 7 6 8 2 4 3 4 题解 树形dp f[x]表示子树i中所有点到点x的距离之和. g[x]表示整个树中所有点到点x的距离之和. 然后我们发现f和g都是可以递推求出来的,并且f[1]=g[1]. 于是可以先求f[x],f[x]…
[POI2008]Sta Description 给出一个N个点的树,找出一个点来,以这个点为根的树时,所有点的深度之和最大 Input 给出一个数字N,代表有N个点.N<=1000000 下面N-1条边. Output 输出你所找到的点,如果具有多个解,请输出编号最小的那个. Sample Input 8 1 4 5 6 4 5 6 7 6 8 2 4 3 4 Sample Output 7 这道题看完题面和数据范围应该很明显的是树形dp了. \(F[i]\)表示当\(i\)的子树(1为根节点…
1864: [Zjoi2006]三色二叉树 Description Input 仅有一行,不超过500000个字符,表示一个二叉树序列. Output 输出文件也只有一行,包含两个数,依次表示最多和最少有多少个点能够被染成绿色. Sample Input 1122002010 Sample Output 5 2 题解:经典的树形DP题.用f[i]表示点i是绿色时最多有多少个点能被染成绿色,g[i]表示i不是绿色时最多有多少个点被染成绿色,容易推出状态转移方程: f[i]=g[ch[i][0]]+…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4661 题意:有n个人呈树状结构,每个人知道一个独特的消息.每次可以让一个人将他所知的所有消息告诉和他相邻的人.求所有人都知道所有消息花时花的步数最少的所有方案数. 首先需要满足的是最小的步数,所以我们一定是先把所有消息先传到一个人手中才是最优的,然后再从这个人传回去,也就是每条边走两次.我们只需要考虑单向传到某个人的方案数cnt,因为再传回去也是cnt.那么我们可以枚举每个点为收集点,把所有的和加起…
题目链接:http://www.bnuoj.com/bnuoj/problem_show.php?pid=26482 题意:给一颗树,根节点为送电站,可以无穷送电,其它节点为house,电量达到pi时可以点亮,边为电线,传输有容量上限,求最多点亮多少个house.. 简单树形DP,f[i][j]表示第 i 个节点电量为 j 时最多点亮的house个数.那么f[u][j]=Max{ f[u][j], f[u][j-k]+f[v][k] | v为u的儿子节点 }.. //STATUS:C++_AC_…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4679 题意:给一颗树,每个边有一个权值,要你去掉一条边权值w剩下的两颗子树中分别的最长链a,b,使得w*Min(a,b)最小.. 说白了就是要枚举每条边,然后在O(1)的时间内求出两颗子树的最长链.因此我们可以考虑用树形DP,首先一遍DFS,对于每个节点维护两个信息,hign[u]:u为根节点的子树的深度,f[u]:u为根节点的子树的最长链.然后还要维护一个hige[i][0]和hige[i][1]…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4616 比较典型的树形DP题目,f[u][j][k]表示以点u为子树,经过 j 个陷阱的最大值,其中k=0表示从u点出发,k=1表示终点为点u.则转移方程为:f[u][j+is_rtap][k]=Max{ f[v][j][k] | v为u的儿子节点,0<=j<=m }.要分别对每颗子树求出最大值,枚举其中的两颗子树,一颗出,一颗进,更新最大值.要注意在更新k=0时的最大值是,j要从1开始遍历,因为如…
题意: 给定一个仙人掌,边权为1 距离定义为两个点之间的最短路径 直径定义为距离最远的两个点的距离 求仙人掌直径 题解: 类比树形dp求直径. f[i]表示i向下最多多长 处理链的话,直接dp即可. 处理环的话,类似点双tarjan,把环上的点都拉出来. 先考虑拼接更新答案.断环成链复制一倍,为了保证最短路,答案必须只能是f[i]+f[j]+i-j (i-len/2<=j<i) 单调队列优化. 直接i-j即可,另一半的绕环会在复制后的那里处理. 然后更新f[x],直接找环上其他的元素,距离就是…
题目 https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1800 题意 n(n < 1000)个节点m条边的无向无环无重边图,最小顶点覆盖的同时要尽量让只有一个端点是点亮的边数最少 思路 如刘书: 1. 无向无环图一定是森林,适用树形DP 2. 因为有两个优化目标,所以将两个目标线性组合,设以i为根的树上的顶点覆盖数为x,单点点亮边数为…