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