#include <stdio.h> #include <stdlib.h> int main() { unsigned int n, m, d, a, b; unsigned int i,x,y; scanf("%u %u %u", &n, &m, &d); unsigned int SIZE = n + 1; unsigned int *graf_wart; graf_wart = calloc(SIZE, sizeof(unsigned int)); unsigned int *graf_stop; graf_stop = calloc(SIZE, sizeof(unsigned int)); unsigned int **graf_nast; graf_nast = calloc(SIZE, sizeof(unsigned int*)); for(i = 0; i < SIZE; i++) { graf_nast[i] = calloc(SIZE, sizeof(unsigned int)); } for(i = 0; i < m; i++) { scanf("%u %u", &a, &b); graf_stop[a] += 1; graf_stop[b] += 1; graf_nast[a][b] = graf_nast[a][0]; graf_nast[a][0] = b; graf_nast[b][a] = graf_nast[b][0]; graf_nast[b][0] = a; } /* for(x = 0; x <= n; x++) { for(y = 0; y <= n; y++) printf("%u ", graf_nast[x][y]); printf("\n"); } */ unsigned int *kolejka, kolejka_i = 0, kolejka_max = 0; kolejka = calloc(SIZE, sizeof(unsigned int)); unsigned int len_graf_max = 0; unsigned int i_graf_max = 0; unsigned int len_graf = 0; unsigned int i_graf = 0; unsigned int j_graf; for(i = 1; i <= n; i++) { if( (graf_stop[i] >= d) && (graf_wart[i] == 0) ) { len_graf = 1; i_graf = i; j_graf = 0; kolejka_max = 1; kolejka_i = 1; kolejka[kolejka_max-1] = i; graf_wart[i] = i; //printf("%u ",i); while(kolejka_i<=kolejka_max) { while((j_graf = graf_nast[kolejka[kolejka_i-1]][j_graf])!=0) { if( (graf_stop[j_graf] >= d) && (graf_wart[j_graf] == 0) ) { len_graf += 1; kolejka_max += 1; kolejka[kolejka_max-1] = j_graf; graf_wart[j_graf] = i; //printf("%u ",j_graf); } } kolejka_i += 1; } if(len_graf > len_graf_max) { len_graf_max = len_graf; i_graf_max = i_graf; } } } if( len_graf_max > 1 ) { printf("%u\n", len_graf_max); for(i = 1; i <= n; i++) if( graf_wart[i] == i_graf_max) printf("%u ", i); } else { printf("NIE"); } 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 97 98 99 100 101 102 103 104 105 106 107 108 | #include <stdio.h> #include <stdlib.h> int main() { unsigned int n, m, d, a, b; unsigned int i,x,y; scanf("%u %u %u", &n, &m, &d); unsigned int SIZE = n + 1; unsigned int *graf_wart; graf_wart = calloc(SIZE, sizeof(unsigned int)); unsigned int *graf_stop; graf_stop = calloc(SIZE, sizeof(unsigned int)); unsigned int **graf_nast; graf_nast = calloc(SIZE, sizeof(unsigned int*)); for(i = 0; i < SIZE; i++) { graf_nast[i] = calloc(SIZE, sizeof(unsigned int)); } for(i = 0; i < m; i++) { scanf("%u %u", &a, &b); graf_stop[a] += 1; graf_stop[b] += 1; graf_nast[a][b] = graf_nast[a][0]; graf_nast[a][0] = b; graf_nast[b][a] = graf_nast[b][0]; graf_nast[b][0] = a; } /* for(x = 0; x <= n; x++) { for(y = 0; y <= n; y++) printf("%u ", graf_nast[x][y]); printf("\n"); } */ unsigned int *kolejka, kolejka_i = 0, kolejka_max = 0; kolejka = calloc(SIZE, sizeof(unsigned int)); unsigned int len_graf_max = 0; unsigned int i_graf_max = 0; unsigned int len_graf = 0; unsigned int i_graf = 0; unsigned int j_graf; for(i = 1; i <= n; i++) { if( (graf_stop[i] >= d) && (graf_wart[i] == 0) ) { len_graf = 1; i_graf = i; j_graf = 0; kolejka_max = 1; kolejka_i = 1; kolejka[kolejka_max-1] = i; graf_wart[i] = i; //printf("%u ",i); while(kolejka_i<=kolejka_max) { while((j_graf = graf_nast[kolejka[kolejka_i-1]][j_graf])!=0) { if( (graf_stop[j_graf] >= d) && (graf_wart[j_graf] == 0) ) { len_graf += 1; kolejka_max += 1; kolejka[kolejka_max-1] = j_graf; graf_wart[j_graf] = i; //printf("%u ",j_graf); } } kolejka_i += 1; } if(len_graf > len_graf_max) { len_graf_max = len_graf; i_graf_max = i_graf; } } } if( len_graf_max > 1 ) { printf("%u\n", len_graf_max); for(i = 1; i <= n; i++) if( graf_wart[i] == i_graf_max) printf("%u ", i); } else { printf("NIE"); } return 0; } |