SPFA——玛丽卡
来源:互联网 发布:浙大网新恒天软件福利 编辑:程序博客网 时间:2024/05/21 01:46
题目来源
洛谷P1186玛丽卡
https://www.luogu.org/problem/show?pid=1186
思路
建图 在原图上用SPFA求城市N到城市1的最短路长度ans 记录最短路路径
枚举删去最短路路径中一条边的情况 求删去此边后的最短路(SPFA)
如果此时的最短路大于ans ans变为此时的最短路长度
最后 ans即为所求答案
代码(C++)
#include <cstdio>#include <queue>#include <bitset>#define N 1010#define M 1000010using namespace std;bitset<N> in; queue<int> q;long long dis[N]={0},ans=0;int n,m,u,v,w,cnt=0,pos,he[N],f[N];int en[M],ne[M],len[M],fr[M];inline void add();int main(){scanf("%d%d",&n,&m);for(int i=1;i<=m;++i)scanf("%d%d%d",&u,&v,&w),add();for(int j=1;j<n;++j)dis[j]=9223372036854775807;f[n]=0; in[n]=1; q.push(n);while(!q.empty()){pos=q.front(); q.pop(); in[pos]=0;for(int k=he[pos];k!=0;k=ne[k])if(dis[pos]+len[k]<dis[en[k]]){dis[en[k]]=dis[pos]+len[k];f[en[k]]=k;if(in[en[k]]==0)q.push(en[k]),in[en[k]]=1;}}ans=dis[1];for(int i=f[1];i!=0;i=f[fr[i]]){for(int j=1;j<n;++j)dis[j]=9223372036854775807;in=0; in[n]=1; q.push(n);while(!q.empty()){pos=q.front(); q.pop(); in[pos]=0;for(int k=he[pos];k!=0;k=ne[k])if(k!=i&&dis[pos]+len[k]<dis[en[k]]){dis[en[k]]=dis[pos]+len[k];if(in[en[k]]==0)q.push(en[k]),in[en[k]]=1;}}if(dis[1]>ans)ans=dis[1];}printf("%lld",ans);return 0;}inline void add(){en[++cnt]=v;len[cnt]=w;ne[cnt]=he[u];he[u]=cnt; fr[cnt]=u;en[++cnt]=u;len[cnt]=w;ne[cnt]=he[v];he[v]=cnt; fr[cnt]=v;}
阅读全文
0 0
- SPFA——玛丽卡
- 【CODEVS 1021】玛丽卡 SPFA+枚举
- 玛丽卡(spfa删边求最短路)
- codevs 1021 玛丽卡(spfa)
- codevs 1021 玛丽卡(spfa)
- 【洛谷 P1186】玛丽卡 spfa+删边
- 【日常学习】【SPFA+SLF+LLL】codevs1021 玛丽卡题解
- codevs 1021 玛丽卡(spfa路径记录,思维题)
- 【题解】P1186玛丽卡(最短路+图论+SPFA+SLF优化)
- 玛丽卡
- 玛丽卡
- 玛丽卡
- 【最短路】玛丽卡
- wikioi 1021 玛丽卡
- 【wikioi1021】 玛丽卡
- Codevs1021玛丽卡题解
- Codevs1021 玛丽卡
- Codevs 1021 玛丽卡
- js笔记—— 基础部分一
- 问题总结(1)
- poj 2367 Genealogical tree (拓扑排序)
- maven windows安装
- Java8 I/O源码-FilterInputStream、FilterOutputStream与装饰器模式
- SPFA——玛丽卡
- 整理的遥感期刊,SCI检索,3/4区居多
- 泊松曲面重建
- win10配置java环境变量(javac不是内部命令)
- 知乎网友对线程池的讲解
- 数据库补充学习(3):SQL语言分类及例子
- 菜鸟上路之oracle中rowid和rownum的使用 笔记整理
- 深度优先遍历和广度优先遍历
- 面试宝典(PART I)位运算(I)求X和Y的平均数