#include <bits/stdc++.h>
using namespace std;
const int MAXN=100100;
vector<int> eg[MAXN];
long long sonsum[MAXN],dp[MAXN];
long long n;
long long dfs1(int x,int fa)
{
long long ret=0;
sonsum[x]=1;
for(int i=0;i<eg[x].size();i++)
{
if(eg[x][i]==fa)
continue;
ret+=dfs1(eg[x][i],x);
sonsum[x]+=sonsum[eg[x][i]];
}
ret+=sonsum[x]-1;
return ret;
}
void dfs2(int x,int fa)
{
for(int i=0;i<eg[x].size();i++)
{
if(eg[x][i]==fa)
continue;
dp[eg[x][i]]=dp[x]+n-2*sonsum[eg[x][i]];
dfs2(eg[x][i],x);
}
}
int main()
{
int i,u,v;
while(cin>>n)
{
for(i=1;i<=n;i++)
eg[i].clear();
for(i=1;i<n;i++)
{
scanf("%d%d",&u,&v);
eg[u].push_back(v);
eg[v].push_back(u);
}
dp[1]=dfs1(1,0);
dfs2(1,0);
for(i=1;i<=n;i++)
printf("%lld\n",dp[i]);
}
}
51nod 1405 树的距离之和
最新推荐文章于 2021-07-09 16:28:52 发布