代码如下,如果用在主函数外手写函数给dist数组赋初值,将无效。
#include<bits/stdc++.h>
using namespace std;
const int MAXN=1500+10;
struct edge
{
int ver;
long long val;
};
vector<edge> g[MAXN];
long long dist[MAXN];
bool vis[MAXN];
int n,m;
void spfa(int root)
{
queue<int> q;
q.push(root);
vis[root]=true;
while(!q.empty())
{
int u=q.front();q.pop();
vis[u]=false;
for(int i=0;i<g[u].size();i++)
{
int v=g[u][i].ver,w=g[u][i].val;
if(dist[u]+w > dist[v])
{
dist[v]=dist[u]+w;
if(!vis[v])
{
q.push(v);
vis[v]=true;
}
}
}
}
}
int main()
{
//freopen(".in","r",stdin);
//freopen(".out","w",stdout);
int n,m;
cin>>n>>m;
for(int i=1;i<=m;i++)
{
int u,v,w;
cin>>u>>v>>w;
edge in;
in.ver=v;in.val=w;
g[u].push_back(in);
}
for(int i=2;i<=n;i++)
{
dist[i]=LLONG_MIN;
}
spfa(1);
if(dist[n]==LLONG_MIN) cout<<-1<<endl;
else cout<<dist[n]<<endl;
return 0;
}
/*
5 5
1 2 2
1 3 5
2 3 4
2 4 6
3 4 1
3 5 12
4 5 10
1 5 12
*/
73分 * 4