#include <iostream> #include <math.h> #include <algorithm> #include <stack> #include <vector> #define MAXN 500005 using namespace std; int V,E; bool odw[MAXN]; int curr_v; int tab[MAXN]; vector <int> G[MAXN]; stack <int> S; bool dfs(int n) { odw[n]= true; S.push(n); for(int i=0;i<G[n].size() ;i++) { int k=G[n][i]; if(k==curr_v)return true; if(!odw[k] && dfs(k)==true) return true; } S.pop(); return false; } void wczytaj(){ cin>>V>>E; for(int i=0; i<E ; i++) { int a,b; cin>>a>>b; G[a].push_back(b); } } int main(){ wczytaj(); int loopCnt = 0; for(int i=1;i<=V;i++) { if(!odw[i]) { curr_v = i; if(dfs(i)==false) continue; loopCnt++; int t; while(!S.empty()) { t = S.top(); tab[t]++; S.pop(); } for(int j=0;j<=V;j++)odw[j]=false; } } int tmp=0; vector <int> odp; if(loopCnt!=0){ for(int i=1;i<=V;i++) { if(tab[i]==loopCnt){odp.push_back(i);}else{tmp++;} } cout<<odp.size()<<endl; for(int i=0;i<odp.size();i++)cout<<odp[i]<<" "; } else{cout<<"NIE"<<endl; return 0;} if(tmp==0 && loopCnt == 0) cout<<"NIE"<<endl; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 | #include <iostream> #include <math.h> #include <algorithm> #include <stack> #include <vector> #define MAXN 500005 using namespace std; int V,E; bool odw[MAXN]; int curr_v; int tab[MAXN]; vector <int> G[MAXN]; stack <int> S; bool dfs(int n) { odw[n]= true; S.push(n); for(int i=0;i<G[n].size() ;i++) { int k=G[n][i]; if(k==curr_v)return true; if(!odw[k] && dfs(k)==true) return true; } S.pop(); return false; } void wczytaj(){ cin>>V>>E; for(int i=0; i<E ; i++) { int a,b; cin>>a>>b; G[a].push_back(b); } } int main(){ wczytaj(); int loopCnt = 0; for(int i=1;i<=V;i++) { if(!odw[i]) { curr_v = i; if(dfs(i)==false) continue; loopCnt++; int t; while(!S.empty()) { t = S.top(); tab[t]++; S.pop(); } for(int j=0;j<=V;j++)odw[j]=false; } } int tmp=0; vector <int> odp; if(loopCnt!=0){ for(int i=1;i<=V;i++) { if(tab[i]==loopCnt){odp.push_back(i);}else{tmp++;} } cout<<odp.size()<<endl; for(int i=0;i<odp.size();i++)cout<<odp[i]<<" "; } else{cout<<"NIE"<<endl; return 0;} if(tmp==0 && loopCnt == 0) cout<<"NIE"<<endl; } |