#include<iostream> #include<cstdio> #include<vector> #include<algorithm> using namespace std; vector<int> tab[200001], graf; int n, m, d, i, p, k, x, y, ans; bool met[200001], killed[200001]; int cons[200001], kolejka[200001]; void dfs( int w ) { met[w] = 1; graf.push_back( w ); i++; for( int a = 0; a < tab[w].size(); a++ ) { if( !killed[ tab[w][a] ] && !met[ tab[w][a] ] )dfs( tab[w][a] ); } } void bfs( int w ) { for( int a = 0 ; a < tab[w].size(); a++ ) { cons[ tab[w][a] ]--; if( cons[ tab[w][a] ] < d && !killed[ tab[w][a] ] ) { killed[ tab[w][a] ] = 1; kolejka[++p] = tab[w][a]; } } while( k < p )bfs( kolejka[ ++k ] ); } int main() { ios_base::sync_with_stdio( 0 ); cin>>n>>m>>d; for( int a = 1; a <= m; a++ ) { cin>>x>>y; tab[x].push_back( y ); tab[y].push_back( x ); cons[x]++; cons[y]++; } for( int a = 1; a <= n; a++ ) { if( cons[a] < d ) { killed[a] = 1; met[a] = 1; kolejka[++p] = a; } } while( k < p ) { bfs( kolejka[ ++k ] ); } for( int a = 1; a <= n; a++ )met[a] = 0; for( int a = 1; a <= n; a++ ) { if( !met[a] && !killed[a] )dfs( a ); ans = max( ans, i ); i = 0; } for( int a = 1; a <= n; a++ )met[a] = 0; graf.clear(); for( int a = 1; a <= n; a++ ) { if( !met[a] && !killed[a] )dfs( a ); if( i == ans ) { if( ans ) { cout<<ans<<endl; sort( graf.begin(), graf.end() ); for( int b = 0; b < graf.size(); b++ )cout<<graf[b]<<" "; } else cout<<"NIE"; break; } graf.clear(); i = 0; } 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 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<cstdio> #include<vector> #include<algorithm> using namespace std; vector<int> tab[200001], graf; int n, m, d, i, p, k, x, y, ans; bool met[200001], killed[200001]; int cons[200001], kolejka[200001]; void dfs( int w ) { met[w] = 1; graf.push_back( w ); i++; for( int a = 0; a < tab[w].size(); a++ ) { if( !killed[ tab[w][a] ] && !met[ tab[w][a] ] )dfs( tab[w][a] ); } } void bfs( int w ) { for( int a = 0 ; a < tab[w].size(); a++ ) { cons[ tab[w][a] ]--; if( cons[ tab[w][a] ] < d && !killed[ tab[w][a] ] ) { killed[ tab[w][a] ] = 1; kolejka[++p] = tab[w][a]; } } while( k < p )bfs( kolejka[ ++k ] ); } int main() { ios_base::sync_with_stdio( 0 ); cin>>n>>m>>d; for( int a = 1; a <= m; a++ ) { cin>>x>>y; tab[x].push_back( y ); tab[y].push_back( x ); cons[x]++; cons[y]++; } for( int a = 1; a <= n; a++ ) { if( cons[a] < d ) { killed[a] = 1; met[a] = 1; kolejka[++p] = a; } } while( k < p ) { bfs( kolejka[ ++k ] ); } for( int a = 1; a <= n; a++ )met[a] = 0; for( int a = 1; a <= n; a++ ) { if( !met[a] && !killed[a] )dfs( a ); ans = max( ans, i ); i = 0; } for( int a = 1; a <= n; a++ )met[a] = 0; graf.clear(); for( int a = 1; a <= n; a++ ) { if( !met[a] && !killed[a] )dfs( a ); if( i == ans ) { if( ans ) { cout<<ans<<endl; sort( graf.begin(), graf.end() ); for( int b = 0; b < graf.size(); b++ )cout<<graf[b]<<" "; } else cout<<"NIE"; break; } graf.clear(); i = 0; } return 0; } |