Codeforces Round #549 (Div. 2), problem: (C) Queen 【思维】

题意

输入一个n,表示有个节点,接着输入n行,每行两个数a,b,a表示是i 的父节点(i是第i行,表示第i个节点),b为1表示此节点不尊重其父节点,b为0表示尊重父节点,从小到大输出不尊重父节点并且他的左右子节点都不尊重他的节点

思路

对于c==0的情况,将父节点和子结点拿出来,即vis [ ] =1
最后按顺序输出没有访问过得结点即可

code

#include<bits/stdc++.h>
#define endl '\n'
using namespace std;
const int maxn=1e5+5;
int n;
int vis[maxn];
int main(){
    cin>>n;
    for(int i=1;i<=n;i++){
        int fa,c;
        cin>>fa>>c;
        if(!c){
            if(fa!=-1)
                vis[fa]=1;
            vis[i]=1;
        }
    }
    int ff=0;
    for(int i=1;i<=n;i++){
        if(vis[i]!=1){
            cout<<i<<" ";
            ff=1;
        }
    }
    cout<<endl;
    if(!ff) cout<<-1<<endl;
    return 0;
}
学如逆水行舟,不进则退
发布了470 篇原创文章 · 获赞 1150 · 访问量 17万+

猜你喜欢

转载自blog.csdn.net/weixin_42429718/article/details/104148238