w不是可能小于-1吗?那-1岂不是会影响结果?为什么初始化成-1也能ac?f数组存储的是结果,WS数组存的是u到v的边权。
#include<bits/stdc++.h>
using namespace std;
int n,m,a,b,w;
int inDegree[1505],f[1505],WS[1505][1505];
vector<int> v[1505];
queue<int> q;
int main(){
memset(f,-1,sizeof(f));
memset(WS,-1,sizeof(WS));
cin>>n>>m;
for(int i=1;i<=m;i++){
cin>>a>>b>>w;
inDegree[b]++;
v[a].push_back(b);
WS[a][b]=max(WS[a][b],w); //给了多个权值时选最大的
}
//除了1,入度为0的点都要删除,删除含义对应的操作就是让这个点对下一个点的入度-1
for(int i=2;i<=n;i++){
if(inDegree[i]==0){
for(int j=0;j<v[i].size();j++) inDegree[v[i][j]]--;
}
}
f[1]=0;
q.push(1);
while(!q.empty()){
int t=q.front(); q.pop();
for(int i=0;i<v[t].size();i++){
int idx=v[t][i];
f[idx]=max(f[idx],f[t]+WS[t][idx]);
if(--inDegree[idx]==0) q.push(idx);
}
}
cout<<f[n];
return 0;
}