不知道为什么WA了一个点,麻烦大佬指正
谢谢
#include<bits/stdc++.h>
using namespace std;
const int maxn=5e4;
int n,cnt1[maxn],cnt2[maxn],cnt3[maxn],book[maxn],ans=1<<30,id;
vector<int> e[maxn*2];
void dfs1(int x)
{
for(int i=0;i<e[x].size();i++)
{
if(book[e[x][i]]) continue;
book[e[x][i]]=1;
dfs1(e[x][i]);
cnt1[x]+=cnt1[e[x][i]];
cnt2[x]+=cnt2[e[x][i]];
}
cnt1[x]++;
cnt2[x]+=cnt1[x]-1;
}
void dfs2(int x)
{
for(int i=0;i<e[x].size();i++)
{
if(book[e[x][i]]) continue;
book[e[x][i]]=1;
cnt3[e[x][i]]=cnt3[x]-cnt1[e[x][i]]*2+n;
dfs2(e[x][i]);
}
}
int main()
{
cin>>n;
int x,y;
for(int i=1;i<n;i++)
{
scanf("%d%d",&x,&y);
e[x].push_back(y),e[y].push_back(x);
}
memset(book,0,sizeof(book));book[1]=1;dfs1(1);
cnt3[1]=cnt2[1];
memset(book,0,sizeof(book));book[1]=1;dfs2(1);
for(int i=1;i<=n;i++) if(ans>cnt3[i]) ans=cnt3[i],id=i;
printf("%d %d",id,ans);
return 0;
}