//Jan Sosnowski //runda 2 #include<iostream> #include<vector> using namespace std; int n,m,k; vector <bool> odw; vector <int> dlugosc; vector <int> v; vector < vector < int > > g; //wejscie vector < vector < int > > g2; //odwrotnie void czysc_dlug(){ for(int i =0;i<=n;i++){ dlugosc[i] = 1; } } int max_sciezka(){ int sciezka = 0; for(int i=1;i<=n;i++){ if(odw[i] == 0){ sciezka = max(sciezka,dlugosc[i]); for(int j =0;j<g[i].size();j++){ dlugosc[g[i][j]] = max(dlugosc[g[i][j]],dlugosc[i]+1); } } } // cout << " max_sciezka " << sciezka << "\n"; return sciezka; } int main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); cin >> n >> m >> k; v.clear(); g.clear(); odw.clear(); int x,y; for(int i =0;i<=n;i++){ g.push_back(v); g2.push_back(v); odw.push_back(0); dlugosc.push_back(1); } for(int i =0;i<m;i++){ cin >> x >> y; g[x].push_back(y); g2[y].push_back(x); } int wyn = n; if(k==n) wyn = 0; else if(k == n-1) wyn = 1; else if(k==0){ wyn = max_sciezka(); } else if(k==1){ for(int i =1;i<=n;i++){ czysc_dlug(); odw[i] = 1; wyn = min(wyn,max_sciezka()); odw[i] = 0; // cout << wyn << "\n"; } } else if(k==2){ for(int i = 1;i<n;i++){ odw[i] = 1; for(int j = i+1;j<=n;j++){ odw[j] = 1; czysc_dlug; wyn = min(wyn,max_sciezka()); odw[j] = 0; } odw[i] = 0; } } else if(k==3){ for(int i = 1;i<n-1;i++){ odw[i] = 1; for(int j = i+1;j<n;j++){ odw[j] = 1; for(int l = j+1;l<=n;l++){ odw[l] = 1; wyn = min(wyn,max_sciezka()); odw[l] = 0; } odw[j] = 0; } odw[i] = 0; } } else if(k==4){ for(int i =1;i<n-2;i++){ odw[i] = 1; for(int j=i+1;j<n-1;j++){ odw[j] = 1; for(int l = j+1;l<n;l++){ odw[l] = 1; for(int p=l+1;p<=n;p++){ odw[p] = 1; wyn = max(wyn,max_sciezka()); odw[p] = 0; } odw[l] = 0; } odw[j] = 0; } odw[i] = 0; } } cout << wyn; }
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 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 | //Jan Sosnowski //runda 2 #include<iostream> #include<vector> using namespace std; int n,m,k; vector <bool> odw; vector <int> dlugosc; vector <int> v; vector < vector < int > > g; //wejscie vector < vector < int > > g2; //odwrotnie void czysc_dlug(){ for(int i =0;i<=n;i++){ dlugosc[i] = 1; } } int max_sciezka(){ int sciezka = 0; for(int i=1;i<=n;i++){ if(odw[i] == 0){ sciezka = max(sciezka,dlugosc[i]); for(int j =0;j<g[i].size();j++){ dlugosc[g[i][j]] = max(dlugosc[g[i][j]],dlugosc[i]+1); } } } // cout << " max_sciezka " << sciezka << "\n"; return sciezka; } int main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); cin >> n >> m >> k; v.clear(); g.clear(); odw.clear(); int x,y; for(int i =0;i<=n;i++){ g.push_back(v); g2.push_back(v); odw.push_back(0); dlugosc.push_back(1); } for(int i =0;i<m;i++){ cin >> x >> y; g[x].push_back(y); g2[y].push_back(x); } int wyn = n; if(k==n) wyn = 0; else if(k == n-1) wyn = 1; else if(k==0){ wyn = max_sciezka(); } else if(k==1){ for(int i =1;i<=n;i++){ czysc_dlug(); odw[i] = 1; wyn = min(wyn,max_sciezka()); odw[i] = 0; // cout << wyn << "\n"; } } else if(k==2){ for(int i = 1;i<n;i++){ odw[i] = 1; for(int j = i+1;j<=n;j++){ odw[j] = 1; czysc_dlug; wyn = min(wyn,max_sciezka()); odw[j] = 0; } odw[i] = 0; } } else if(k==3){ for(int i = 1;i<n-1;i++){ odw[i] = 1; for(int j = i+1;j<n;j++){ odw[j] = 1; for(int l = j+1;l<=n;l++){ odw[l] = 1; wyn = min(wyn,max_sciezka()); odw[l] = 0; } odw[j] = 0; } odw[i] = 0; } } else if(k==4){ for(int i =1;i<n-2;i++){ odw[i] = 1; for(int j=i+1;j<n-1;j++){ odw[j] = 1; for(int l = j+1;l<n;l++){ odw[l] = 1; for(int p=l+1;p<=n;p++){ odw[p] = 1; wyn = max(wyn,max_sciezka()); odw[p] = 0; } odw[l] = 0; } odw[j] = 0; } odw[i] = 0; } } cout << wyn; } |