输入
第一行输入两个整数n(1<=n<=100000),
表示家谱中的总人数
接下来读入n-1行,每一行有两个整数
x,y 表示x是y的父母;
输出
输出n行,每行一个整数,表示第i个人有多少个后代。
例:
输入
4
1 2
1 3
2 4
输出
3
1
0
0
代码如下
#include <iostream>
#include <vector>
using namespace std;
vector <int> son[100005];
bool f[100005];
int num[100005];
int dfs(int t){
int ret=0;
for (int i=0;i<son[t].size();i++){
ret+=dfs(son[t][i]);
}
num[t]=ret;
return ret+1;
}
int main ()
{
int n;
cin>>n;
int x,y;
for (int i=0;i<n-1;i++){
cin>>x>>y;
son[x].push_back(y);
f[y]=true;
}
int t;
for (int i=1;i<=n;i++)
{
if (!f[i])
{
t=i;
break;
}
}
dfs (t);
for (int i=1;i<=n;i++){
cout<<num[i]<<endl;
}
return 0;
}
欢迎关注我的公众号:王同学的蓝桥杯训练营