#include <stdio.h> int m,n,d; struct e { int v; struct e *n; } e[400400], *v[200200]; int s[200200]; int st[200200],sp; int ss[200200]; int iq[200200]; int main() { int i,j,bm,mx=0,sc=1; scanf("%d%d%d",&n,&m,&d); for (i = 0; i < m; i++) { int v1, v2; scanf("%d%d",&v1,&v2); v1--; v2--; e[2*i].v=v1; e[2*i+1].v=v2; e[2*i].n=v[v2]; e[2*i+1].n=v[v1]; v[v2]=e+2*i; v[v1]=e+2*i+1; s[v1]++; s[v2]++; } for (i = 0; i < n; i++) { // printf("%d:%d ",i+1,s[i]); if (s[i]<d) st[sp++] = i,s[i]=0; } // puts(""); for (i = 0; i < sp; i++) { int v1 = st[i]; struct e *e = v[v1]; s[v1] = 0; for(; e; e=e->n) if (s[e->v]) { // printf("%d(%d)->%d(%d)\n",v1+1,s[v1],e->v+1,s[e->v]); if (--s[e->v] < d) st[sp++] = e->v, s[e->v] = 0; } } // for (i = 0; i < n; i++) printf("%d:%d ",i+1,s[i]); puts(""); for (i = 0; i < n; i++) if (s[i] && !ss[i]) { sp=0; st[sp++]=i; ss[i]=sc; for (j = 0; j < sp; j++) { int v1 = st[j]; struct e *e = v[v1]; s[v1] = 0; for(; e; e = e->n) if (s[e->v] && !ss[e->v]) { st[sp++] = e->v; ss[e->v] = sc; } } // printf("%d\n",sp); if (sp>mx) mx=sp, bm=sc; sc++; } // for (i = 0; i < n; i++) printf("%d:%d ",i+1,ss[i]); puts(""); if (!mx) return!puts("NIE"); printf("%d\n",mx); for (i = 0; i < n; i++) if (ss[i]==bm) { printf("%d%c",i+1,--mx?' ':'\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 | #include <stdio.h> int m,n,d; struct e { int v; struct e *n; } e[400400], *v[200200]; int s[200200]; int st[200200],sp; int ss[200200]; int iq[200200]; int main() { int i,j,bm,mx=0,sc=1; scanf("%d%d%d",&n,&m,&d); for (i = 0; i < m; i++) { int v1, v2; scanf("%d%d",&v1,&v2); v1--; v2--; e[2*i].v=v1; e[2*i+1].v=v2; e[2*i].n=v[v2]; e[2*i+1].n=v[v1]; v[v2]=e+2*i; v[v1]=e+2*i+1; s[v1]++; s[v2]++; } for (i = 0; i < n; i++) { // printf("%d:%d ",i+1,s[i]); if (s[i]<d) st[sp++] = i,s[i]=0; } // puts(""); for (i = 0; i < sp; i++) { int v1 = st[i]; struct e *e = v[v1]; s[v1] = 0; for(; e; e=e->n) if (s[e->v]) { // printf("%d(%d)->%d(%d)\n",v1+1,s[v1],e->v+1,s[e->v]); if (--s[e->v] < d) st[sp++] = e->v, s[e->v] = 0; } } // for (i = 0; i < n; i++) printf("%d:%d ",i+1,s[i]); puts(""); for (i = 0; i < n; i++) if (s[i] && !ss[i]) { sp=0; st[sp++]=i; ss[i]=sc; for (j = 0; j < sp; j++) { int v1 = st[j]; struct e *e = v[v1]; s[v1] = 0; for(; e; e = e->n) if (s[e->v] && !ss[e->v]) { st[sp++] = e->v; ss[e->v] = sc; } } // printf("%d\n",sp); if (sp>mx) mx=sp, bm=sc; sc++; } // for (i = 0; i < n; i++) printf("%d:%d ",i+1,ss[i]); puts(""); if (!mx) return!puts("NIE"); printf("%d\n",mx); for (i = 0; i < n; i++) if (ss[i]==bm) { printf("%d%c",i+1,--mx?' ':'\n'); } return 0; } |