連接php
題意:每個人的基本工資爲888,給出兩我的的關係a,b,表明a的工資比b高問知足所有條件的話,最少需要支付多少錢ios
代碼:ide
#include <map> #include <queue> #include <stack> #include <string> #include <vector> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <iostream> #include <algorithm> using namespace std; int n,m; vector<int> G[10005]; int d[10005],deg[10005]; int topo(){ int i,j,u,v,op; queue<int> qu; for(i=1;i<=n;i++) if(deg[i]==0) qu.push(i); op=0; while(qu.size()){ u=qu.front(); qu.pop(); op++; for(i=0;i<G[u].size();i++){ v=G[u][i]; deg[v]--; d[v]=max(d[v],d[u]+1); //至關於求關鍵路勁 if(deg[v]==0) qu.push(v); } } if(op!=n) return 0; return 1; } int main(){ int i,j,u,v,ans; while(scanf("%d%d",&n,&m)!=EOF){ for(i=1;i<=n;i++){ G[i].clear(); d[i]=deg[i]=0; } for(i=1;i<=m;i++){ //反向建圖拓撲更新一下 scanf("%d%d",&u,&v); G[v].push_back(u); deg[u]++; } if(topo()==0) puts("-1"); else{ ans=0; for(i=1;i<=n;i++) ans+=d[i]; printf("%d\n",ans+888*n); } } return 0; }