#include <bits/stdc++.h>
using namespace std;
const int MOD=80112002;
const int N=5005;
int n,m,f[N],ans=-1;
bool book[N];
vector<int> g[N];
void dfs(int p,int len){
if(len<=f[p])return;//剪枝优化
f[p]=len;//记录最优的
if(g[p].empty())ans=max(ans,len);//已经到头了
for(int to:g[p])dfs(to,(len+1)%MOD);//继续走
return;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
cin>>n>>m;
for(int i=1,u,v;i<=m;++i){
cin>>u>>v;
g[u].push_back(v);//建立有向边:从被捕食者->捕食者
book[v]=true;//book存的是哪些生物是绿色植物
}
for(int i=1;i<=n;++i)if(!book[i])dfs(i,1);//深搜
cout<<ans<<endl;
}
本蒟蒻用的是建图+DFS的方式,题目里给的样例过了。有注释解释代码。