题目链接:
L2-026 小字辈 (25分)
思路:
对每个祖先dfs,同时维护深度即可;
代码:
#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e5 + 5;
int d;
vector<int> chd[maxn], rcd[maxn];
void dfs(int u, int lv){
if(chd[u].size() == 0){
rcd[lv].push_back(u);
d = max(d, lv);
return;
}
for(int & x : chd[u]) dfs(x, lv + 1);
}
int main() {
#ifdef MyTest
freopen("Sakura.txt", "r", stdin);
#endif
int n;
scanf("%d", &n);
vector<int> anc;
for(int i = 1; i <= n; i++){
int p;
scanf("%d", &p);
if(~p) chd[p].push_back(i);
else anc.push_back(i);
}
for(int & x : anc) dfs(x, 1);
cout << d << '
';
cout << rcd[d][0];
for(int i = 1; i < rcd[d].size(); i++){
printf(" %d", rcd[d][i]);
}
return 0;
}