Balancing Act Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 9072 Accepted: 3765
Description
Consider a tree T with N (1 <= N <= 20,000) nodes numbered 1...N. Deleting any node from the tree yields a forest: a collection of one or more trees. Define the balance of a node to be the size of the largest tree in the forest T created by deleting that node from T.Input
The first line of input contains a single integer t (1 <= t <= 20), the number of test cases. The first line of each test case contains an integer N (1 <= N <= 20,000), the number of congruence. The next N-1 lines each contains two space-separated node numbers that are the endpoints of an edge in the tree. No edge will be listed twice, and all edges will be listed.Output
For each test case, print a line containing two integers, the number of the node with minimum balance and the balance of that node.Sample Input
1 7 2 6 1 2 1 4 4 5 3 7 3 1
Sample Output
1 2
Source
POJ Monthly--2004.05.15 IOI 2003 sample task求樹的重心!!
樹的重心性質是以該點為根的有根樹最大子樹的結點數最少,也就是讓這樹更加平衡,容易知道這樣所有的子樹的大小都不會超過整個樹大小的一半,所以在樹分治時防止樹退化成鏈很有用。。
求樹的重心做法是dfs簡單的樹dp就行。設son[i]表示以i為根的子樹的結點數(包括i,葉子結點就是1),那麼son[i]就+=sum(son[j])...然後求以i為根的最大結點數就是max(son[j],n-son[i]),n-son[i]是i的上方結點的個數。
關於樹的重心一些性質:http://fanhq666.blog.163.com/blog/static/81943426201172472943638/
代碼:
/** * @author neko01 */ //#pragma comment(linker, /STACK:102400000,102400000) #include#include #include #include #include #include #include #include #include #include