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