题意:给定一棵树,求出树上的一点,使得树上的全部点到该点的距离之和最小。思路:暴力显然是O(N^2)等死对吧。我们首先将无根树转化为有根树,然后一边dfs求出f[i],size[i].f[i]表示以i为根的子树中全部的点到i的距离之和,size[i]表示以i为根的子树的点数。以下開始脑洞大开:如今对...
分类:
其他好文 时间:
2015-05-08 23:35:46
阅读次数:
133
1.题目描述:点击打开链接
2.解题思路:本题要求放置尽可能少的服务器,使得所有的客户端到最近的服务器的距离都不超过k。由于已经放置了一个服务器,不妨把它当做根结点,先把无根树转化为有根树,然后我们考虑最深的叶子,那么不难证明,该叶子结点的最优服务器的放置位置是它的k级祖先。这样本题的算法便不难想出:从最深的叶子开始枚举,并在它的k级祖先处放置一个服务器,同时标记该服务器能覆盖到的所有结点,这样...
分类:
其他好文 时间:
2015-03-14 09:40:44
阅读次数:
122
题目大意:给出一棵树,在某个选择某个结点可以覆盖和它相连的所有边,问最少选多少个结点所有边都被覆盖。
首先将无根树转化为有根树,0为根。
用d[i][0]表示不选择结点i时覆盖以结点i为根的子树最少要多少个结点,用d[i][1]表示选择结点i时覆盖以结点i为根的子树最少要多少个结点。若结点i不选,为了和覆盖所有和结点i相连的结点,则每个儿子都必须选,若结点i选,则每个儿子选择较小的那个...
分类:
其他好文 时间:
2015-03-10 10:31:14
阅读次数:
145
1.题目描述:点击打开链接
2.解题思路:本题让我长见识了。也学到了很多新的知识:LCA,多级祖先算法。如果只是单纯地将无根树转化为有根树,找到u,v的中点,再用BFS计算中线上结点的个数,那么最终会导致TLE。本题的高效算法如下:
首先求出以1为根的树的所有结点的总个数,保存在num数组中,再利用LCA算法求出u,v的公共祖先,设为LCA。找到u,v结点的中点mid.此时规定deep...
分类:
其他好文 时间:
2015-03-02 09:37:41
阅读次数:
120
题意:给定一棵树,求出树上的一点,使得树上的所有点到该点的距离之和最小。
思路:暴力显然是O(N^2)等死对吧。
我们首先将无根树转化为有根树,然后一边dfs求出f[i],size[i].
f[i]表示以i为根的子树中所有的点到i的距离之和,size[i]表示以i为根的子树的点数。
下面开始脑洞大开:
现在对于我们一开始的那个root,我们已经知道了答案。问题就是如何快速...
分类:
其他好文 时间:
2014-10-21 17:48:24
阅读次数:
207
本文出自 http://blog.csdn.net/shuangde800
题目传送门
题意:
给出一棵树,求离每个节点最远的点的距离
思路:
把无根树转化成有根树分析,
对于上面那棵树,要求距结点2的最长距离,那么,就需要知道以2为顶点的子树(蓝色圈起的部分,我们叫它Tree(2)),距顶点2的最远距离L1...
分类:
其他好文 时间:
2014-06-05 06:56:39
阅读次数:
226