#include<bits/stdc++.h>
using namespace std;
#define pb push_back
#define mp make_pair
#define st first
#define nd second
#define ll long long
#define ull unsigned ll
#define pii pair<int,int>
#define pll pair<ll,ll>
#define vi vector<int>
const int mxn=500;
vector<int> pol[mxn];
set<int> pus;
int wynk=1000;
int n,m,k;
set<set<int> > sett;
void licz(int n,set<int> nie){
if(sett.count(nie)){
return;
}
sett.insert(nie);
vector<int> dp(n+10),ost(n+10);
set<int>::iterator it;
for(it=nie.begin();it!=nie.end();it++){
dp[(*it)]=-1;
}
int wyn=0,kt=0;
for(int i=1;i<=n;i++){
if(dp[i]==-1){
continue;
}
dp[i]=max(dp[i],1);
wyn=max(wyn,dp[i]);
if(wyn==dp[i]){
kt=i;
}
for(int j=0;j<pol[i].size();j++){
if(dp[pol[i][j]]!=-1 && dp[i]+1 > dp[pol[i][j]]){
dp[pol[i][j]]=dp[i]+1;
ost[pol[i][j]]=i;
}
}
}
wynk=min(wynk,wyn);
if(nie.size()==k){
return;
}
while(kt!=0){
set<int> set2=nie;
set2.insert(kt);
licz(n,set2);
kt=ost[kt];
}
}
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
cin >>n >>m >>k;
for(int i=0;i<m;i++){
int a,b;
cin >>a >>b;
pol[a].pb(b);
}
licz(n,pus);
cout <<wynk;
}
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 | #include<bits/stdc++.h> using namespace std; #define pb push_back #define mp make_pair #define st first #define nd second #define ll long long #define ull unsigned ll #define pii pair<int,int> #define pll pair<ll,ll> #define vi vector<int> const int mxn=500; vector<int> pol[mxn]; set<int> pus; int wynk=1000; int n,m,k; set<set<int> > sett; void licz(int n,set<int> nie){ if(sett.count(nie)){ return; } sett.insert(nie); vector<int> dp(n+10),ost(n+10); set<int>::iterator it; for(it=nie.begin();it!=nie.end();it++){ dp[(*it)]=-1; } int wyn=0,kt=0; for(int i=1;i<=n;i++){ if(dp[i]==-1){ continue; } dp[i]=max(dp[i],1); wyn=max(wyn,dp[i]); if(wyn==dp[i]){ kt=i; } for(int j=0;j<pol[i].size();j++){ if(dp[pol[i][j]]!=-1 && dp[i]+1 > dp[pol[i][j]]){ dp[pol[i][j]]=dp[i]+1; ost[pol[i][j]]=i; } } } wynk=min(wynk,wyn); if(nie.size()==k){ return; } while(kt!=0){ set<int> set2=nie; set2.insert(kt); licz(n,set2); kt=ost[kt]; } } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cin >>n >>m >>k; for(int i=0;i<m;i++){ int a,b; cin >>a >>b; pol[a].pb(b); } licz(n,pus); cout <<wynk; } |
English