拓扑 67分 过不了3、5、6点
#include<bits/stdc++.h>
using namespace std;
const int N=1505;
const int M=50005;
long long way[N];
int n,m,cnt,head[N],in[N];
struct node{
int to,W,next;
}e[M];
queue<int>q;
inline void add(int x,int y,int w)
{
e[++cnt]=(node){y,w,head[x]};
head[x]=cnt;
}
inline void topsort()
{
q.push(1);
while(!q.empty())
{
int v=q.front();
q.pop();
for(int i=head[v];i;i=e[i].next)
{
int u=e[i].to;
in[u]--;
way[u]=max(way[u],way[v]+e[i].W);
if(in[u]==0) q.push(u);
}
}
}
int main()
{
cin>>n>>m;
int a,b,w;
for(int i=1;i<=m;i++)
{
cin>>a>>b>>w;
add(a,b,w);
in[b]++;
}
topsort();
if(!way[n]) cout<<-1;
else cout<<way[n];
return 0;
}