麻烦看下哪错了,为什么第六组数据直接挂了。 @AC_duckling @风之城008 @famvics @ACmachineoier @Zeda_ @空气树
#include<cstdio>
#include<vector>
using namespace std;
inline int read() {
register int n=0;
register char c=getchar();
while (c<'0'||c>'9') c=getchar();
while (c>='0'&&c<='9') n=n*10+c-'0',c=getchar();
return n;
}
const int N=1000005;
vector <int> v[N];
int n,from,to,f[N],sum,ans,maxn,son[N];
bool visit[N];
void DFS(int x,int s) {
f[x]=s;
visit[x]=1;
sum+=s;
for (int i=0; i<v[x].size(); i++) {
if (visit[v[x][i]]) continue;
DFS(v[x][i],s+1);
son[x]+=son[v[x][i]]+1;
}
}
void dfs(int x,int s) {
visit[x]=1;
if (maxn<s) {
maxn=s;
ans=x;
}
for (int i=0; i<v[x].size(); i++) {
if (visit[v[x][i]]) continue;
int now=v[x][i],t1=son[x],t2=son[now];
son[now]=son[x];
son[x]-=son[now]+1;
dfs(now,s+t1-t2-t2-1);
son[x]=t1;
son[now]=t2;
}
}
int main() {
n=read();
for (int i=1; i<n; i++) {
from=read();
to=read();
v[from].push_back(to);
v[to].push_back(from);
}
DFS(1,0);
for (int i=1; i<=n; i++) visit[i]=0;
dfs(1,sum);
printf("%d\n",ans);
return 0;
}
//By与世无争