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