#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; } |
English