#include<iostream> #include<cstdio> #include<vector> using namespace std; vector<int> tab[500001], ans; int n, m, x, y; bool met[500001], jest[500001], cykl; void dfs( int w ) { met[w] = 1; jest[w] = 1; for( int a = 0; a < tab[w].size(); a++ ) { if( met[ tab[w][a] ] ) { if( jest[ tab[w][a] ] )cykl = 1; } else dfs( tab[w][a] ); } jest[w] = 0; } int main() { ios_base::sync_with_stdio( 0 ); cin>>n>>m; for( int a = 1; a <= m; a++ ) { cin>>x>>y; tab[x].push_back( y ); } dfs( 1 ); if( cykl ) { for( int a = 1; a <= n; a++ )met[a] = 0; cykl = 0; for( int a = 1; a <= n; a++ ) { met[a] = 1; for( int b = 1; b <= n; b++ ) { if( !met[b] )dfs( b ); } if( !cykl )ans.push_back( a ); for( int b = 1; b <= n; b++ )met[b] = 0; cykl = 0; } if( ans.size() ) { cout<<ans.size()<<endl; for( int a = 0; a < ans.size(); a++ )cout<<ans[a]<<" "; } else cout<<"0"; } else cout<<"NIE"; return 0; }
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 | #include<iostream> #include<cstdio> #include<vector> using namespace std; vector<int> tab[500001], ans; int n, m, x, y; bool met[500001], jest[500001], cykl; void dfs( int w ) { met[w] = 1; jest[w] = 1; for( int a = 0; a < tab[w].size(); a++ ) { if( met[ tab[w][a] ] ) { if( jest[ tab[w][a] ] )cykl = 1; } else dfs( tab[w][a] ); } jest[w] = 0; } int main() { ios_base::sync_with_stdio( 0 ); cin>>n>>m; for( int a = 1; a <= m; a++ ) { cin>>x>>y; tab[x].push_back( y ); } dfs( 1 ); if( cykl ) { for( int a = 1; a <= n; a++ )met[a] = 0; cykl = 0; for( int a = 1; a <= n; a++ ) { met[a] = 1; for( int b = 1; b <= n; b++ ) { if( !met[b] )dfs( b ); } if( !cykl )ans.push_back( a ); for( int b = 1; b <= n; b++ )met[b] = 0; cykl = 0; } if( ans.size() ) { cout<<ans.size()<<endl; for( int a = 0; a < ans.size(); a++ )cout<<ans[a]<<" "; } else cout<<"0"; } else cout<<"NIE"; return 0; } |