题意:输入一个n,接下来有n-1行。
输入父亲和儿子
求n个人,每个人的直系后代有多少。
思路:vector建临接矩阵。
using namespace std;
const ll maxn = 1e5 + 5;
//ll a[maxn],b[maxn];
bool vis[maxn];
int ans[maxn];
vector<int>a[maxn];
int n, m;
int dfs(int u) {
int res = 0;
for(int i = 0; i < a[u].size(); i++) { //这里不要搞混 是临接矩阵,所以是从0开始的列
res += dfs(a[u][i]);
}
ans[u] = res;
return res + 1;
}
int main() {
int x, y;
cin >> n;
for(int i = 0; i < n - 1; i++) {
cin >> x >> y;
a[x].push_back(y);//建立一个临接矩阵//a[x][0]=y1, a[x][1]=y2;这是从0开始记推的的。
vis[y] = 1;
}
int u;
for(int i = 1; i <= n; i++) {
if(!vis[i]) { //找到父亲
u = i;
break;
}
}
dfs(u);
for(int i = 1; i <= n; i++)
cout << ans[i] << endl;
return 0;
}