#include<bits/stdc++.h>
#define ll long long
using namespace std;
int read(){
int x=0,f=1;char c=getchar();
while(c>'9' or c<'0'){if(c=='-')f=-1; c=getchar();}
while(c<='9' and c>='0'){x=x*10+c-'0';c=getchar();}
return x*f;
}
int n,m,rd[1600],f[1600],lj[1600][1600];
vector<int>p[1600];
queue<int>out;
ll ans=0;
int main(){
n=read();m=read();
for(int i=1;i<=n;i++)f[i]=-1e9;
for(int i=1;i<=m;i++){
int a,b,c;
a=read();b=read();c=read();
p[a].push_back(b);
rd[b]++;
lj[a][b]=max(c,lj[a][b]);
}
f[1]=0;
for(int i=1;i<=n;i++){
if(rd[i]==0)out.push(i);
}
while(!out.empty()){
int c=out.front();
out.pop();
for(int i:p[c]){
rd[i]--;
f[i]=max(f[i],f[c]+lj[c][i]);
if(rd[i]==0){
out.push(i);
}
}
}
if(f[n]!=-1e9)cout<<f[n];
else cout<<-1;
}
P1807最长路 82分求调,用拓补排序+动规做的,前两个样例点WA掉,其他AC