rt,交了30多发,每次都是第二个点wa,有没有好人帮忙看一下。
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int maxn=1e6+5;
struct Node{
int to,value;
};
int in[maxn];
int n,k,m,u,v,w,s[maxn],ans[maxn];
vector<Node>vt[maxn];
vector<int>edge;
void relax(){
queue<int>q;
for(int i=2;i<=n;i++){
if(in[i]==0){
q.push(i);
}
}
while(!q.empty()){
int x=q.front();
q.pop();
for(int i=0;i<vt[x].size();i++){
int v=vt[x][i].to;
in[v]--;
if(in[v]==0){
q.push(v);
}
}
}
}
void top_sort(){
queue<int>q;
q.push(1);
relax();
while(!q.empty()){
int x=q.front();
q.pop();
edge.push_back(x);
for(int i=0;i<vt[x].size();i++){
int v=vt[x][i].to;
int w=vt[x][i].value;
in[v]--;
ans[v]=max(ans[v],ans[x]+w);
if(in[v]==0){
q.push(v);
}
}
}
if(ans[n]!=0){
cout<<ans[n];
}
else{
cout<<-1;
}
}
signed main(){
cin>>n>>m;
for(int i=1;i<=m;i++){
cin>>u>>v>>w;
vt[u].push_back({v,w});
in[v]++;
}
top_sort();
return 0;
}