#include<cstdio> #include<algorithm> #include<vector> #include<queue> using namespace std; int n, m, d, w, maks, ind; vector< vector<int> > T; vector<bool> nie, od; vector<int> st, odp; void dfs1(int ja) { if( st[ja] >= d ) return; nie[ja] = 1; for( int i = 0; i<T[ja].size(); i++ ) st[ T[ja][i] ]--; for( int i = 0; i<T[ja].size(); i++ ) if( !nie[ T[ja][i] ] ) dfs1( T[ja][i] ); } void dfs2(int ja) { od[ja] = 1; w++; for( int i = 0; i<T[ja].size(); i++ ) if( !nie[ T[ja][i] ] && !od[ T[ja][i] ] ) dfs2( T[ja][i] ); } void dfs3(int ja) { od[ja] = 1; odp.push_back(ja); for( int i = 0; i<T[ja].size(); i++ ) if( !nie[ T[ja][i] ] && !od[ T[ja][i] ] ) dfs3( T[ja][i] ); } int main() { int a,b; scanf( "%d%d%d", &n, &m, &d ); T.resize(n+3); st.resize(n+3); nie.resize(n+3); for( int i = 0; i<m; i++ ) { scanf( "%d%d", &a, &b ); T[a].push_back(b); T[b].push_back(a); } for( int i = 1; i<=n; i++ ) st[i] = T[i].size(); for( int i = 1; i<=n; i++ ) if( !nie[i] ) dfs1(i); od.resize(n+3); for( int i = 1; i<=n; i++ ) if( !nie[i] ) { w = 0; dfs2(i); if( w > maks ) { maks = w; ind = i; } } if( maks == 0 ) { printf( "NIE" ); return 0; } od.clear(); od.resize(n+3); dfs3(ind); sort( odp.begin(), odp.end() ); printf( "%d\n", maks ); for( int i = 0; i<odp.size(); i++ ) printf( "%d ", odp[i] ); 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 90 91 92 93 94 95 96 | #include<cstdio> #include<algorithm> #include<vector> #include<queue> using namespace std; int n, m, d, w, maks, ind; vector< vector<int> > T; vector<bool> nie, od; vector<int> st, odp; void dfs1(int ja) { if( st[ja] >= d ) return; nie[ja] = 1; for( int i = 0; i<T[ja].size(); i++ ) st[ T[ja][i] ]--; for( int i = 0; i<T[ja].size(); i++ ) if( !nie[ T[ja][i] ] ) dfs1( T[ja][i] ); } void dfs2(int ja) { od[ja] = 1; w++; for( int i = 0; i<T[ja].size(); i++ ) if( !nie[ T[ja][i] ] && !od[ T[ja][i] ] ) dfs2( T[ja][i] ); } void dfs3(int ja) { od[ja] = 1; odp.push_back(ja); for( int i = 0; i<T[ja].size(); i++ ) if( !nie[ T[ja][i] ] && !od[ T[ja][i] ] ) dfs3( T[ja][i] ); } int main() { int a,b; scanf( "%d%d%d", &n, &m, &d ); T.resize(n+3); st.resize(n+3); nie.resize(n+3); for( int i = 0; i<m; i++ ) { scanf( "%d%d", &a, &b ); T[a].push_back(b); T[b].push_back(a); } for( int i = 1; i<=n; i++ ) st[i] = T[i].size(); for( int i = 1; i<=n; i++ ) if( !nie[i] ) dfs1(i); od.resize(n+3); for( int i = 1; i<=n; i++ ) if( !nie[i] ) { w = 0; dfs2(i); if( w > maks ) { maks = w; ind = i; } } if( maks == 0 ) { printf( "NIE" ); return 0; } od.clear(); od.resize(n+3); dfs3(ind); sort( odp.begin(), odp.end() ); printf( "%d\n", maks ); for( int i = 0; i<odp.size(); i++ ) printf( "%d ", odp[i] ); return 0; } |