重边也判了
#include<iostream>
#include<vector>
#include<queue>
#include<cstring>
using namespace std;
vector<int>s[60010];//邻接链表
queue<int>q;//队列
int n,m,f[60010],outd[60010],ind[60010],d[2500][2500],x,y,w;
int main(){
cin>>n>>m;
for (int i=1;i<=m;++i){//建边
cin>>x>>y>>w;
s[x].push_back(y);
d[x][y]=max(d[x][y],w);//避免重边
outd[x]++;//出度
ind[y]++;//入度
}
memset (f,-1,sizeof(f));//初始化
f[1]=0;
q.push(1);
while (!q.empty()){//拓扑排序
int x=q.front();//出队
q.pop();
for (int i=0;i<s[x].size();++i){//扩展搜索
int y=s[x][i];
f[y]=max(f[x]+d[x][y],f[y]);//取最大值
ind[y]--;//入度-1
if (ind[y]==0){//入队
q.push(y);
}
}
}
cout<<f[n];//输出
return 0;
}