#include <cstdio> #include <vector> using namespace std; int n,m,d; vector<int> KR[1000006]; int ODW[1000006]; int ILK[1000006]; int A[1000006]; int ST[1000006],ilst; void DFSa( int w ) { if ( ILK[w]<d && !ODW[w] ) { ODW[w]=1; for (int& i : KR[w] ) { ILK[i]--; DFSa( i ); } } } void DFSb( int w, int a ) { if ( ODW[w] ) return; ODW[w] = a; for (int& i : KR[w] ) { DFSb( i, a ); } } int main() { scanf("%d%d%d",&n,&m,&d); for ( int i=0; i<n; i++ ) { ODW[i]=0; ILK[i]=0; } while ( m-- ) { int a,b; scanf("%d%d",&a,&b); a--; b--; KR[a].push_back(b); KR[b].push_back(a); ILK[a]++; ILK[b]++; } for ( int i=0; i<n; i++ ) DFSa( i ); for ( int i=0; i<n; i++ ) { if ( ILK[i] >= d ) ODW[i] = 0; else ODW[i]=-1; } for ( int i=0; i<n; i++ ) { DFSb( i, i+1 ); A[i]=0; } for ( int i=0; i<n; i++ ) { if ( ODW[i]>0 ) A[ODW[i]-1] ++; } int w=-1,ilw=0; for ( int i=0; i<n; i++ ) { if (A[i]>ilw) { w=i+1; ilw=A[i]; } } if ( !ilw ) { printf("NIE\n"); return 0; } printf("%d\n",ilw); for ( int i=0; i<n; i++ ) if ( ODW[i] == w ) printf("%d ",i+1); printf("\n"); 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 | #include <cstdio> #include <vector> using namespace std; int n,m,d; vector<int> KR[1000006]; int ODW[1000006]; int ILK[1000006]; int A[1000006]; int ST[1000006],ilst; void DFSa( int w ) { if ( ILK[w]<d && !ODW[w] ) { ODW[w]=1; for (int& i : KR[w] ) { ILK[i]--; DFSa( i ); } } } void DFSb( int w, int a ) { if ( ODW[w] ) return; ODW[w] = a; for (int& i : KR[w] ) { DFSb( i, a ); } } int main() { scanf("%d%d%d",&n,&m,&d); for ( int i=0; i<n; i++ ) { ODW[i]=0; ILK[i]=0; } while ( m-- ) { int a,b; scanf("%d%d",&a,&b); a--; b--; KR[a].push_back(b); KR[b].push_back(a); ILK[a]++; ILK[b]++; } for ( int i=0; i<n; i++ ) DFSa( i ); for ( int i=0; i<n; i++ ) { if ( ILK[i] >= d ) ODW[i] = 0; else ODW[i]=-1; } for ( int i=0; i<n; i++ ) { DFSb( i, i+1 ); A[i]=0; } for ( int i=0; i<n; i++ ) { if ( ODW[i]>0 ) A[ODW[i]-1] ++; } int w=-1,ilw=0; for ( int i=0; i<n; i++ ) { if (A[i]>ilw) { w=i+1; ilw=A[i]; } } if ( !ilw ) { printf("NIE\n"); return 0; } printf("%d\n",ilw); for ( int i=0; i<n; i++ ) if ( ODW[i] == w ) printf("%d ",i+1); printf("\n"); return 0; } |