代码
#include<bits/stdc++.h>
#define pn putchar('\n')
#define ps putchar(' ')
using namespace std;
typedef long long ll;
template <typename T> void re(T &t) {
t=0; char ch=getchar(); int f=1;
while (ch<'0'||ch>'9') { if (ch=='-') f=-1; ch=getchar(); }
do { (t=((t<<3)+(t<<1)))+=(ch^48); ch=getchar(); } while ('0'<=ch&&ch<='9'); t*=f;
}
inline void wr(ll x){
if(x<0) putchar('-'),x=-x;
if(x>9) wr(x/10);
putchar(x%10+'0');
}
int n,m;
vector<int> ve[100005];
int ans;
int dis[100005];
int d[100005];
int main(){
re(n),re(m);
for(int i=1;i<=m;i++){
int x,y;
re(x),re(y);
ve[x].push_back(y);
d[y]++;
}
queue<int> q;
for(int i=1;i<=n;i++)
if(!d[i]) q.push(i);
while(q.size()){
auto t=q.front();
q.pop();
for(auto i:ve[t]){
dis[i]=max(dis[i],dis[t]+1);
d[i]--;
if(!d[i]) q.push(i);
}
}
for(int i=1;i<=n;i++) ans=max(ans,dis[i]);
wr(ans);
return 0;
}