1131: [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。。
 1 #include<iostream>
 2 #include<cstdlib>
 3 #include<cmath>
 4 #include<cstring>
 5 #include<cstdio>
 6 #include<algorithm>
 7 #include<string>
 8 #include<map>
 9 #include<queue>
10 #include<vector>
11 #include<set>
12 #define inf 1000000000
13 #define maxn 1000000+5
14 #define maxm 2000000+5
15 #define eps 1e-10
16 #define ll long long
17 #define for0(i,n) for(int i=0;i<=(n);i++)
18 #define for1(i,n) for(int i=1;i<=(n);i++)
19 #define for2(i,x,y) for(int i=(x);i<=(y);i++)
20 #define for3(i,x,y) for(int i=(x);i>=(y);i--)
21 #define for4(i,x) for(int i=head[x],y=e[i].go;i;i=e[i].next,y=e[i].go)
22 using namespace std;
23 int read(){
24     int x=0,f=1;char ch=getchar();
25     while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
26     while(ch>='0'&&ch<='9'){x=10*x+ch-'0';ch=getchar();}
27     return x*f;
28 }
29 struct edge{
30     int go,next;
31 }e[maxm];
32 int n,tot,ans,head[maxn],size[maxn],fa[maxn];
33 ll sum,f[maxn],g[maxn];
34 void insert(int u,int v){
35     e[++tot]=(edge){v,head[u]};head[u]=tot;
36     e[++tot]=(edge){u,head[v]};head[v]=tot;
37 }
38 void dfs1(int x){
39     f[x]=size[x]=1;
40     for4(i,x)
41         if(y!=fa[x]){
42             fa[y]=x;
43             dfs1(y);
44             size[x]+=size[y];
45             f[x]+=f[y]+size[y];
46         }
47 }
48 void dfs2(int x){
49     for4(i,x)
50         if(y!=fa[x]){
51             g[y]=f[x]+g[x]-f[y]-size[y]+n-size[y];
52             dfs2(y);
53         }
54 }
55 int main(){
56     //freopen("input.txt","r",stdin);
57     //freopen("output.txt","w",stdout);
58     n=read();
59     for1(i,n-1){
60         int u=read(),v=read();
61         insert(u,v);
62     }
63     dfs1(1);
64     dfs2(1);
65     for1(i,n){
66         g[i]+=f[i];
67         if(g[i]>sum){
68             sum=g[i];ans=i;
69         }
70     }
71     printf("%d",ans);
72     return 0;
73 }
View Code

 

posted @ 2016-06-01 10:39  HTWX  阅读(119)  评论(0编辑  收藏  举报