sgu 134 这题说的是寻找这个树的重心给你一个连通的无向图,他有N个顶点和N-1条边(一棵树)。现在你需要找到这棵树的重心。现在定义树的重心,树的每一个顶点有一个权值。考虑顶点k。如果从图中删除k号顶点(连带的边也一起被删除),剩下的图将只有N-1个顶点而且可能由多个连通分量组成。显然每一个连通...
分类:
其他好文 时间:
2014-08-25 16:49:54
阅读次数:
205
题目大意:
就是要求树的重心,重心的定义就是删除这个点使得森林尽量平衡。
也可以让分治子树的时候使得每颗子树的数量在nlogn以内。
思路分析:
son [x] 表示x的子树的数量 不包括自己。
balance 表示最大的森林的节点数。
最后我们要让最大的balance 最小。
balance = max (balance ,n - 1 - son[x] , son[j]...
分类:
其他好文 时间:
2014-08-23 01:11:09
阅读次数:
205
令一个点的属性值为:去除这个点以及与这个点相连的所有边后得到的连通分量的节点数的最大值。则树的重心定义为:一个点,这个点的属性值在所有点中是最小的。SGU 134 即要找出所有的重心,并且找出重心的属性值。考虑用树形DP。dp[u]表示割去u点,得到的连通分支的节点数的最大值。tot[u]记录以u为...
分类:
其他好文 时间:
2014-08-13 00:31:04
阅读次数:
325
树的直径树的直径(Diameter)是指树上的最长简单路。直径的求法:两遍搜索 (BFS or DFS)任选一点w为起点,对树进行搜索,找出离w最远的点u。以u为起点,再进行搜索,找出离u最远的点v。则u到v的路径长度即为树的直径。简单证明:如果w在直径上,那么u一定是直径的一个端点。反证:若u不是...
分类:
其他好文 时间:
2014-08-08 15:14:46
阅读次数:
373
知识点:树的重心
定义:以这个点为根,那么所有的子树(不算整个树自身)的大小都不超过整个树大小的一半。
性质:
性质 1 :树中所有点到某个点的距离和中,到重心的距离和是最小的,如果有两个距离和,他们的距离和一样。
性质 2 :把两棵树通过某一点相连得到一颗新的树,新的树的重心必然在连接原来两棵树重心的路径上。
性质 3 :一棵树添加或者删除一个节点,树的重心最多只移动一...
分类:
其他好文 时间:
2014-07-27 11:44:53
阅读次数:
238
Balancing Acthttp://poj.org/problem?id=1655 1 #include 2 #include 3 #include 4 #include 5 #define mt(a,b) memset(a,b,sizeof(a)) 6 using namespace std;...
分类:
其他好文 时间:
2014-07-25 16:39:11
阅读次数:
429
【前言】最近一直在忙着学算法,但是效果似乎不是很好。前段时间的树剖也快忘了= =。树套树没熟练,就开始写主席树了= =。更别说本身就不是很懂的莫比乌斯反演了。~~决定好好复习一下。
【点分治的作用】套用SYC大神的话说是:用来解决树上路径点权统计问题。
【大致流程】
①找出这颗树的重心。
②统计经过这个重心的答案
③用重心把树割开
④对每个“小树”做同样的事
【Q1——重心】其实找重...
分类:
其他好文 时间:
2014-05-14 14:14:39
阅读次数:
386
裸的树的重心,要注意的问题是此题的边并没有给出准确的父子拓扑关系,所以需要建双向的边,所以以后要看清题意做仔细分析。可以知道一个结点的子树必定是
它的拓扑子树 和 根树去掉这个拓扑结点树本身,思路也就很明显了。 1 // poj1655 Balancing Act 2 #include 3 #in....
分类:
其他好文 时间:
2014-05-01 03:19:04
阅读次数:
263