距离是1的情况
距离是2的两种情况
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e6+10;
ll n,m,k;
vector<pair<int,int>>g[N];
ll dp[N][3];
int main()
{
scanf("%d",&n);
for(int i=1;i<=n-1;i++)
{
int u,v;
scanf("%d%d",&u,&v);
g[u].push_back({i+1,v});
g[i+1].push_back({u,v});
}
for(int i=1;i<=n;i++)
{
for(auto [next,dist]:g[i])
{
if(dist==1)dp[i][1]++;
else if(dist==2)dp[i][2]++;
}
}
for(int i=1;i<=n;i++)
{
for(auto [next,dist]:g[i])
{
if(dist==1)
{
dp[i][2]+=(dp[next][1]-1);
}
}
}
for(int i=1;i<=n;i++)printf("%d\n",(dp[i][1]+dp[i][2]+1));
}