1 条题解
-
0
最长路SPFA写法
#include <bits/stdc++.h> #define int long long//开long long using namespace std; const int N=5e4+5; const int inf=2147483647; int n,m; struct edge{ int to; int w; }; vector<edge>G[N]; bool vis[N]; int dis[N]; void spfa(int s){//有正边权用SPFA for(int i=1;i<=n;i++)dis[i]=-inf;//注意:最长路要初始化为无穷小 queue<int>q; vis[s]=1; dis[s]=0; q.push(s);//初始化 while(!q.empty()){ int now=q.front(); q.pop(); vis[now]=0;//now不在队列中 for(auto x:G[now]){ int nex=x.to; int val=x.w; if(dis[now]+val>dis[nex]){//注意:最长路用">" dis[nex]=dis[now]+val; if(vis[nex])continue; vis[nex]=1; q.push(nex); } } } } signed main(){ cin>>n>>m; for(int i=1;i<=m;i++){ int u,v,w; cin>>u>>v>>w; G[u].push_back({v,w}); } spfa(1); if(dis[n]==-inf)cout<<-1;//如果为负无穷,输出-1 else cout<<dis[n]; return 0; }
- 1
信息
- ID
- 1194
- 时间
- 1000ms
- 内存
- 512MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者