题目链接:
http://codeforces.com/problemset/problem/1143/C
分析:
这个题我们一开始就可以把所有不尊重一个队列中。并且同时把有子孙尊重的祖先打标记。 然后在输出的时候判断一下就好了
#include"stdio.h"
#include"string.h"
#include"queue"
#include"algorithm"
using namespace std;
int id[100010];
int main()
{
int n;
queue<int>Q;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
int a,b;
scanf("%d%d",&a,&b);
if(a==-1)
continue;
if(b==0) id[a]=1;
if(b==1) Q.push(i);
}
int x[100010];
int k=0;
while(!Q.empty())
{
int ans=Q.front();
if(id[ans]==0)
x[k++]=ans;
Q.pop();
}
if(k==0)
printf("-1\n");
else
{
for(int i=0;i<k;i++)
if(i==0)
printf("%d",x[i]);
else
printf(" %d",x[i]);
printf("\n");
}
}