題解 【[ABC163C] management】
management
題目大意:有\(n\)個人,其中第\(1\)個人是\(Boss\)。接下來輸入\(n-1\)個數(shù),從\(a_2\)到\(a_n\)。其中\(a_i\)是\(i\)的直接上司,\(i\)就是\(a_i\)的直接下司。輸出\(n\)行,第\(i\)行輸出第\(i\)個人有幾個直接下司。
這道題的人物關系其實可以當作一棵樹。把直接上司當成父節(jié)點,直接下司當成子節(jié)點,而\(Boss\)則當成根節(jié)點。
首先來玩一下樣例:
5
1 1 2 2
畫出來應該是這樣的:

因此,我們只要求每個節(jié)點有幾個子節(jié)點即可。
接下來看看實現(xiàn):
Code:
#include <bits/stdc++.h>
#define REP(i, a, b) for (long long i = a; i <= b; ++i)
#define ll long long
#define N 200010
using namespace std;
ll n, m, a[N];
inline ll read(){ //快讀
ll s = 0, w = 1;
char ch = getchar();
for (; ch < '0' || ch > '9'; ch = getchar()) w *= ch == '-' ? -1 : 1;
for (; ch >= '0' && ch <= '9'; ch = getchar()) s = s * 10 + ch - '0';
return s * w;
}
inline void work(){
n = read(); //輸入n
REP(i, 2, n) m = read(), a[m]++; //計算每個數(shù)的子節(jié)點個數(shù)
REP(i, 1, n) printf("%lld\n", a[i]); //輸出每個數(shù)的子節(jié)點個數(shù)
}
int main(){
work();
return 0;
}
浙公網(wǎng)安備 33010602011771號