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