注意出度和入度的问题
#include <iostream>
#include <vector>
#include <queue>
#include <string.h>
#define ll long long
using namespace std;
vector<int> vec[10005];
int in[10004],vis[10004];
int main(){
int n,m,a,b;
// cin >> n >> m;
while(cin >> n >> m){
queue<int> q;
ll res =0;
memset(in,0,sizeof(in));
memset(vis,0,sizeof(vis));
memset(vec,0,sizeof(vec));
int now = 888;
for(int i=0;i<m;i++){
cin >> a >> b;
in[a]++;
// cout << a << b <<endl;
vec[b].push_back(a);
}
// cout << now << endl;
for(int i=1;i<=n;i++){
if(in[i] == 0){
res+=now;
q.push(i);
vis[i] =1;
}
}
// cout << now << endl;
while(!q.empty()){
now++;
while(!q.empty()){
int tp = q.front();q.pop();
for(int i=0;i<vec[tp].size();i++){
in[vec[tp][i]]--;
}
}
for(int i=1;i<=n;i++){
if(!vis[i] && in[i] == 0){
vis[i] = 1;
q.push(i);
res+=now;
}
}
}
bool flag=1;
for(int i =1;i<=n;i++){
if(!vis[i])flag=0;
}
if(flag)
cout << res << endl;
else
cout << -1 << endl;
}
return 0;
}