这么水没必要写题解。
#include<map>
#include<stack>
#include<queue>
#include<ctime>
#include<cmath>
#include<string>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<utility>
#include<iostream>
#include<algorithm>
const int MAXN = 500005;
int n;
bool vis[MAXN] = {false};
int fa[MAXN] = {0};
int ansl = 0,ans[MAXN] = {0};
int main()
{
#ifndef ONLINE_JUDGE
freopen("sgu195.in","r",stdin);
freopen("sgu195.out","w",stdout);
#endif
scanf("%d",&n);
for(int i = 2; i <= n; i++)
scanf("%d",&fa[i]);
for(int i = n; i > 1; i--)
{
if(vis[i] || vis[fa[i]]) continue;
ans[++ansl] = i;
vis[i] = vis[fa[i]] = true;
}
printf("%d\n",ansl*1000);
for(int i = ansl; i >= 1; i--)
printf("%d ",ans[i]);
#ifndef ONLINE_JUDGE
fclose(stdin);
fclose(stdout);
#endif
}版权声明:本文为博主原创文章,未经博主允许不得转载。
本文提供了一种解决SGU195问题的算法思路,通过遍历和标记节点来找出特定的父子节点对,最终输出解决方案。代码中使用了C++标准库进行输入输出操作,以及数组和循环来实现算法逻辑。
155

被折叠的 条评论
为什么被折叠?



