fork download
  1. #include <bits/stdc++.h>
  2. #define int long long
  3. using namespace std;
  4.  
  5. bool f(int u,int p,vector<int> adj[],vector<int> &c,vector<int> &ans){
  6. bool dec=false;
  7. if(c[u]==1){
  8. dec=true;
  9. }
  10. for(auto v:adj[u]){
  11. if(v!=p){
  12. dec = (dec & (c[v]==1));
  13. f(v,u,adj,c,ans);
  14. }
  15.  
  16. }
  17. if(dec){
  18. ans.push_back(u);
  19. }
  20. return dec;
  21.  
  22. }
  23. void solve() {
  24. int n;
  25. cin>>n;
  26. vector<int> c(n+1);
  27. vector<int> adj[n+1];
  28. int root;
  29. for(int i=1;i<=n;i++){
  30. int p,x;
  31. cin>>p>>x;
  32. c[i]=x;
  33. if(p==-1){
  34. root=i;
  35. continue;
  36. }
  37. adj[p].push_back(i);
  38. adj[i].push_back(p);
  39. }
  40. vector<int> ans;
  41. f(root,-1,adj,c,ans);
  42. sort(ans.begin(),ans.end());
  43. if(ans.size()==0){
  44. cout<<-1<<endl;
  45. return;
  46. }
  47. for(auto j:ans){
  48. cout<<j<<" ";
  49. }
  50. cout<<endl;
  51.  
  52.  
  53.  
  54.  
  55.  
  56. }
  57.  
  58. signed main() {
  59.  
  60. solve();
  61.  
  62. return 0;
  63. }
  64.  
Success #stdin #stdout 0.01s 5280KB
stdin
5
-1 0
1 1
1 1
2 0
3 0
stdout
-1