#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<vector>
#include<map>
#include<set>
using namespace std;
#define maxn 100010
vector<int> child[maxn];
int len=0;
int ans[100010];
int maxdepth=0;
void DFS(int index,int depth)
{
if(depth>maxdepth&&child[index].size()==0)
{
len=0;
ans[len++]=index;
maxdepth=depth;
return;
}
if(depth==maxdepth&&child[index].size()==0)
{
//len++;
ans[len++]=index;
return;
}
for(int i=0;i<child[index].size();i++)
{
DFS(child[index][i],depth+1);
}
//return maxdepth;
}
int main()
{
int n;
scanf("%d",&n);
int father;
int root;
for(int i=1;i<=n;i++)
{
scanf("%d",&father);
if(father!=-1)
{
child[father].push_back(i);
}
else
root=i;
}
DFS(root,1);
printf("%d\n",maxdepth);
printf("%d",ans[0]);
// printf("len=%d\n",len);
for(int i=1;i<len;i++)
{
printf(" %d",ans[i]);
}
return 0;
}
一开始不敢写
还有能输出层次
不知道怎么输出对应下标
其实定义一个数组即可
一开始还想定义一个结构体
判断的时候分开来判断
数组长度也可以重新计数
最后输出格式也遇到了问题
直接空格+数字就不会有多余的空格了