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