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