随笔分类 -  树形dp

摘要:题目大意:对一棵树,求出从每个结点出发能到走的最长距离(每个结点最多只能经过一次),将这些距离按排成一个数组得到dis[1],dis[2],dis[3]……dis[n] ,在数列的dis中求一个最长的区间,使得区间中的最大值与最小值的差不超过m。思路:先找出树的直径的两个端点来,那么树当中的其它节点... 阅读全文
posted @ 2015-09-05 15:16 Howe_Young 阅读(251) 评论(0) 推荐(0)
摘要:题目大意:给定一棵树,让求出依次访问k个点的最小花费,每条边的权值都为1.思路:如果能一直往下走不回来,那么这个路径肯定是最小的,这就取决于给定的k,但是怎么确定这个能一直走的长度呢,其实这个就是树的直径,也叫作最长简单路径。找出来这个直径之后,只需和k比较一下就能确定走多少步。设直径为maxx,如... 阅读全文
posted @ 2015-09-02 19:08 Howe_Young 阅读(164) 评论(0) 推荐(0)
摘要:树的直径:树上的最长简单路径。求解的方法是bfs或者dfs。先找任意一点,bfs或者dfs找出离他最远的那个点,那么这个点一定是该树直径的一个端点,记录下该端点,继续bfs或者dfs出来离他最远的一个点,那么这两个点就是他的直径的短点,距离就是路径长度。具体证明见http://www.cnblogs... 阅读全文
posted @ 2015-09-02 16:08 Howe_Young 阅读(302) 评论(0) 推荐(0)
摘要:树的重心的定义是:一个点的所有子树中节点数最大的子树节点数最小。这句话可能说起来比较绕,但是其实想想他的字面意思也就是找到最平衡的那个点。POJ 1655 题目大意:直接给你一棵树,让你求树的重心,如果有多个,找出编号最小的那个,并输出他的子树当中最大的节点数。思路:利用dfs求出每个点的所有孩子数... 阅读全文
posted @ 2015-09-02 11:23 Howe_Young 阅读(331) 评论(0) 推荐(0)
摘要:去网上搜题解大多数都是说论文,搜了论文看了看,写的确实挺好,直接复制过来。不过代码中有些细节还是要注意的,参考这篇http://blog.sina.com.cn/s/blog_6d5aa19a0100o73m.html一段设X为满足ii,那么i对答案的贡献为B[i]-i。显然,随着i的增大,B[i]... 阅读全文
posted @ 2015-09-01 20:50 Howe_Young 阅读(446) 评论(0) 推荐(0)
摘要:题目大意:求树中每个点到所有叶子节点的距离的最大值是多少。思路: 这个题用两边dfs就可以,一遍是求当前点到子树那个方向上的最大值和次大值,另外一遍是父亲方向上的最大值。之所以要求子树方向上的次大值,是因为如果求当前点v的最长的距离的时候,子树里面的显而易见可以求出来,但是父亲方向上的就不确定了,如... 阅读全文
posted @ 2015-08-31 19:27 Howe_Young 阅读(228) 评论(0) 推荐(0)