思路就是两遍dfs求树的重心,没有发现哪里写挂了,求dalao指点
不是最小序号的问题,感觉可能是f[1]的问题?但是没有样例数据,没有办法验证
救救www
#include<bits/stdc++.h>
using namespace std;
struct edge{
int to,nxt;
}e[100010];
int size[100010],bh,f[100010],ans=114514,cnt,head[100010],n;
void add(int u,int v)
{
e[++cnt].to=v;
e[cnt].nxt=head[u];
head[u]=cnt;
}
void dfs(int x,int father,int dep)
{
size[x]=1;
for(int i=head[x];i;i=e[i].nxt)
{
if(e[i].to!=father)
{
dfs(e[i].to,x,dep+1);
size[x]+=size[e[i].to];
}
}
f[1]+=dep;
}
void dp(int x,int father)
{
for(int i=head[x];i;i=e[i].nxt)
{
if(e[i].to!=father)
{
f[e[i].to]=f[x]+n-size[e[i].to]*2;
dp(e[i].to,x);
}
}
}
int main()
{
cin>>n;
for(int i=1;i<=n-1;i++)
{
int u,v;
cin>>u>>v;
add(u,v),add(v,u);
}
dfs(1,0,0);
dp(1,0);
for(int i=1;i<=n;i++)
{
if(f[i]<ans)ans=f[i],bh=i;
}
printf("%d %d",bh,ans);
return 0;
}