添加链接描述
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e4+5;
int res[maxn],in[maxn];
vector<int> g[maxn];
int topsort(int n){
queue<int> q;
for(int i=1;i<=n;i++)
if(in[i]==0) q.push(i);
int c=0;
while(!q.empty()){
int x=q.front();
q.pop();
c++;
for(int i=0;i<g[x].size();i++){
in[g[x][i]]--;
if(in[g[x][i]]==0){
q.push(g[x][i]);
res[g[x][i]]=max(res[g[x][i]],res[x]+1);
}
}
}
if(c!=n) return -1;
int s=0;
for(int i=1;i<=n;i++){
s+=res[i]+888;
}
return s;
}
int main()
{
int n,m;
int j;
while(cin>>n>>m){
memset(in,0,sizeof(in));
memset(g,0,sizeof(g));
memset(res,0,sizeof(res));
for(int i=0;i<m;i++){
int a,b;
scanf("%d%d",&a,&b);
g[b].push_back(a);
in[a]++;
}
cout<<topsort(n)<<endl;
}
return 0;
}