标签:
2 1 1 2 2 2 1 2 2 1
1777 -1
#include <iostream> #include<cstdio> #include<cstring> #include<vector> #include<queue> using namespace std; int i,n,m; int a[10002],cnt[10002]; vector<int> s[10002]; long long sum; bool toposort() { queue<int> Q; int num=0; for(int i=1;i<=n;i++) if (cnt[i]==0) {Q.push(i); a[i]=888;} while(!Q.empty()) { int u=Q.front(); num++; Q.pop(); for(int i=0;i<s[u].size();i++) { cnt[s[u][i]]--; if (cnt[s[u][i]]==0) { Q.push(s[u][i]); a[s[u][i]]=max(a[u]+1,a[s[u][i]]); } } } if (num<n) return 0; return 1; } int main() { while(~scanf("%d%d",&n,&m)) { for(i=1;i<=n;i++) s[i].clear(); memset(cnt,0,sizeof(cnt)); for(i=1;i<=m;i++) { int x,y; scanf("%d%d",&y,&x); s[x].push_back(y); cnt[y]++; } memset(a,0,sizeof(a)); if (!toposort()) { printf("-1\n"); continue; } sum=0; for(i=1;i<=n;i++) sum+=a[i]; printf("%lld\n",sum); } return 0; }
标签:
原文地址:http://www.cnblogs.com/stepping/p/5700373.html