代码
#include<iostream>
#include<cstdio>
#include<vector>
#include<queue>
using namespace std;
int n,m,in[5005],f[5005];
vector<pair<int,int>>out[5005];
queue<int>inq;
int main(){
scanf("%d%d",&n,&m);
while(m--){
int u,v,w;
scanf("%d%d%d",&u,&v,&w);
out[u].push_back(make_pair(v,w));
in[v]++;
}
for(int i=1;i<=n;i++){
f[i]=-1;
if(!in[i])inq.push(i);
}
f[1]=0;
while(!inq.empty()){
int u=inq.front();
inq.pop();
for(auto i:out[u]){
in[i.first]--;
f[i.first]=max(f[i.first],f[u]+i.second);
if(!in[i.first])inq.push(i.first);
}
}
printf("%d",f[n]);
return 0;
}
测试点信息
