Dp方程错误90pts
代码:
#include<iostream>
using namespace std;
#define int long long
const long long MAXN=2000001;
int k,head[MAXN],cnt=1,n,dis[MAXN];
long long m[MAXN],siz[MAXN],maxn;
struct node{
int to,nxt;
}e[MAXN*2];
void add(int x,int y){
e[++cnt].to=y;
e[cnt].nxt=head[x];
head[x]=cnt;
}
void dfs(int now,int t){
dis[t]=dis[now]+1;
m[1]+=dis[t]-1;
siz[t]=1;
for(int i=head[t];i;i=e[i].nxt){
int y=e[i].to;
if(y!=now)
dfs(t,y),siz[t]+=siz[y];
}
}
void dfs1(int now,int pre){
if(now!=1)
m[now]=m[pre]+n-siz[now];
if(m[now]>maxn)
maxn=m[now],k=now;
for(int i=head[now];i;i=e[i].nxt){
int y=e[i].to;
if(y!=pre)
dfs1(y,now);
}
}
signed main(){
cin>>n;
for(int i=1;i<n;i++){
int x,y;
cin>>x>>y;
add(x,y);
add(y,x);
}
dfs(0,1);
dfs1(1,0);
cout<<k;
}