#include<bits/stdc++.h>
#define luk(n,m) for(int i=n; i<m; ++i)
#define maxn 310
#define pb(n) push_back(n)
#define mp make_pair
#define inf 1000000000
#define mod 1000000007
#define ll long long
#define ff first.first
#define fs first.second
using namespace std;
vector<int>kraw[maxn];
int n,k,mini=inf;
int dp[maxn], czy[maxn];
int licz()
{
int maxi=0;
luk(1,n+1)
{
int s=(int)kraw[i].size();
for(int j=0; j<s; ++j)
{
if(czy[kraw[i][j]]!=inf)
dp[kraw[i][j]]=max(dp[kraw[i][j]], dp[i]+1);
}
maxi=max(maxi,dp[i]);
}
return maxi;
}
void czysc()
{
luk(1,n+1)
dp[i]=0;
}
void rob(int x, int a)
{
if(x==k)
{
czysc();
mini=min(licz(),mini);
return;
}
luk(a,n+1)
{
czy[i]=inf;
rob(x+1,i+1);
czy[i]=0;
}
}
int main()
{
int m,a,b;
scanf("%d%d%d", &n, &m, &k);
luk(0,m)
{
scanf("%d%d", &a, &b);
kraw[a].pb(b);
}
rob(0,1);
if(k==n)
printf("0");
else
printf("%d", mini+1);
}
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 | #include<bits/stdc++.h> #define luk(n,m) for(int i=n; i<m; ++i) #define maxn 310 #define pb(n) push_back(n) #define mp make_pair #define inf 1000000000 #define mod 1000000007 #define ll long long #define ff first.first #define fs first.second using namespace std; vector<int>kraw[maxn]; int n,k,mini=inf; int dp[maxn], czy[maxn]; int licz() { int maxi=0; luk(1,n+1) { int s=(int)kraw[i].size(); for(int j=0; j<s; ++j) { if(czy[kraw[i][j]]!=inf) dp[kraw[i][j]]=max(dp[kraw[i][j]], dp[i]+1); } maxi=max(maxi,dp[i]); } return maxi; } void czysc() { luk(1,n+1) dp[i]=0; } void rob(int x, int a) { if(x==k) { czysc(); mini=min(licz(),mini); return; } luk(a,n+1) { czy[i]=inf; rob(x+1,i+1); czy[i]=0; } } int main() { int m,a,b; scanf("%d%d%d", &n, &m, &k); luk(0,m) { scanf("%d%d", &a, &b); kraw[a].pb(b); } rob(0,1); if(k==n) printf("0"); else printf("%d", mini+1); } |
English