#include<bits/stdc++.h> using namespace std; int n,m; int g; struct node { int mubiao; int timm; }gg[10005]; vector<node> mp[1005]; int tim[1005]; int in[1005]; queue<int>q; int max(int ss,int bb) { if(ss>bb) return ss; return bb; } //struct node gg; int main() { while(scanf("%d%d",&n,&m)!=EOF) { for(int i=0;i<n;i++) { mp[i].clear(); in[i]=0; } memset(tim,0,sizeof(tim)); for(int i=0;i<m;i++) { scanf("%d%d%d",&g,&gg[i].mubiao,&gg[i].timm); mp[g].push_back(gg[i]); in[gg[i].mubiao]++; } for(int i=0;i<n;i++) { if(in[i]==0) { q.push(i); tim[i]=1; } } int re=0; while(!q.empty()) { int j=q.front(); q.pop(); int temp=tim[j]; if(re<=temp) re=temp; for(unsigned int i=0;i<mp[j].size();i++) { tim[mp[j][i].mubiao]=max(tim[mp[j][i].mubiao],temp+mp[j][i].timm); if(--in[mp[j][i].mubiao]==0) { q.push(mp[j][i].mubiao); } } } printf("%d\n",re); } return 0; }
原文:http://www.cnblogs.com/hsd-/p/4931655.html