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
#include<iostream>
#include<vector>
#include<set>
#include<algorithm>

using namespace std;

#define VAR(x,n) __typeof(n) x = (n)
#define FOREACH(x,n) for(VAR(x,(n).begin());x!=(n).end();++x)

int main(){
    int licz_m, licz_dr, d, a, b;
    cin>>licz_m>>licz_dr>>d;
    typedef set<int> wierzcholek;
    vector<wierzcholek> graf;
    graf.resize(licz_m+1);
    for(int i=0; i<licz_dr; ++i){
        cin>>a>>b;
        graf[a].insert(b);
        graf[b].insert(a);
    }
    int buf=1;
    while(buf!=0){
        buf = 0;
        for(int i=1; i<graf.size(); ++i){
            if(graf[i].size()<d && graf[i].size()!=0){
                buf++;
                FOREACH(it,graf[i]){
                    graf[*it].erase(i);
                }
                graf[i].clear();
            }
        }
    }
    vector<int> lista_miast;
    for(int i=1; i<graf.size(); ++i){
        if(graf[i].size()>=d){
            lista_miast.push_back(i);
        }
    }
    int miasto=0;
    vector<int> organizatorzy;
    vector<bool> miasta_odwiedzone;
    miasta_odwiedzone.resize(licz_m+1);
    for(int i=0; i<miasta_odwiedzone.size(); ++i){
        miasta_odwiedzone[i] = false;
    }
    for(int i=0; i<lista_miast.size(); ++i){
        buf = lista_miast[i];
        if(miasta_odwiedzone[buf]==true){
            continue;
        }
        vector<int> T_T;
        T_T.push_back(buf);
        miasta_odwiedzone[buf] = true;
        for (int indeks = 0; indeks < T_T.size();++indeks) {
            int aktualne_miasto = T_T[indeks];
            FOREACH(it, graf[aktualne_miasto]){
                if(miasta_odwiedzone[*it]== true){
                    continue;
                }else{
                    miasta_odwiedzone[*it]=true;
                    T_T.push_back(*it);
                }
            }
        }
        if(T_T.size()>organizatorzy.size()){
            organizatorzy = T_T;
        }
    }
    if(organizatorzy.size()==0){
        cout<<"NIE";
    }else{
        cout<<organizatorzy.size()<<endl;
        sort(organizatorzy.begin(), organizatorzy.end());
        for(int i=0; i<organizatorzy.size(); ++i){
            cout<<organizatorzy[i]<<" ";
        }
    }
    return 0;
}