https://www.luogu.com.cn/problem/P1807
https://www.luogu.com.cn/record/199710981
第二个点炸了,求调。
#include<bits/stdc++.h>
using namespace std;
int n,m;
struct Side{int v,w;};
struct Top{vector<Side>vec;};
Top way[50005];
int vis[1505],M[1505];
bool flag=false;
queue<int>que;
int main()
{
cin>>n>>m;
for(int i=1;i<=m;i++)
{
int a,b,c;
cin>>a>>b>>c;
Side s;
s.v=b;
s.w=c;
way[a].vec.push_back(s);
vis[b]++;
}
que.push(1);
for(int i=2;i<=n;i++)
if(vis[i]==0)
for(int j=0;j<way[i].vec.size();j++)
vis[way[i].vec[j].v]--;
while(!que.empty())
{
int poi=que.front();
que.pop();
for(int i=0;i<way[poi].vec.size();i++)
{
vis[way[poi].vec[i].v]--;
if(vis[way[poi].vec[i].v]==0)
que.push(way[poi].vec[i].v);
M[way[poi].vec[i].v]=max(M[way[poi].vec[i].v],M[poi]+way[poi].vec[i].w);
if(way[poi].vec[i].v==n)
flag=true;
}
}
if(flag==false)
cout<<"-1\n";
else
cout<<M[n]<<endl;
return 0;
}