有一个研究团队,团队分成许多研究小组,每个小组的一部分成员可能再分成小组。小组的成员只知道自己的组长是谁,而在同一个组长领导下的成员之间却相互不认识。现在这个团队希望有一个程序能统计一下各组长带领小组的规模,即对每一个成员想知道自己及自己带领下的小组有多少人。
输入格式:
2行,第1行有1个数字N(0<N<2×105)(0<N<2×105),代表小组的人数
第2行有N个数a1,a2,…,ai,…,aN,表示第i个人的领导是ai。团队的领导用0表示,说明没有人做他的组长。数据保证没有环路。单独的一个成员视为1个人的小组。
输出格式:
1行,N个数字,表示第i名成员的团队的规模
输入样例:
6 0 1 2 1 2 2
输出样例:
6 4 1 1 1 1
#include<iostream>
#include<vector>
using namespace std;
int main() {
int n ;
int a[10005];
int res[10005];
cin >> n;
fill(res, res+n, 1);
int k;
for(int i = 0; i < n; i++) {
cin >> a[i];
if(a[i] == 0) k = i;
}
for(int i = 0;i < n; i++) {
if(a[i] == 0) continue;
int j = i;
while(j != k) {
j = a[j] - 1;
res[j] ++;
}
}
for(int i = 0;i < n;i ++) {
cout<< res[i] << " ";
}
}
|