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