博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
次短路
阅读量:4885 次
发布时间:2019-06-11

本文共 1567 字,大约阅读时间需要 5 分钟。

一、思想:

求次短路,可以通过求最短路得到次短路长度

1到n的次短路长度必然产生于:从1走到x的最短路 + edge[x][y] +  y到n的最短路
首先预处理好1到每一个节点的最短路,和n到每一个节点的最短路
然后枚举每一条边作为中间边(x,y)或者(y,x),如果加起来长度等于最短路长度则跳过,否则更新。
从1走到x的最短路 + edge[x][y] +  y到n的最短路  给dist[n] 比较 找大于dist[n] 且是最小的那一个 

两遍spfa+暴力枚举

luogu 2865 次短路模板

#include
#define rep(i,x,y) for(register int i=x;i<=y;i++)using namespace std;const int N=5050;const int M=100050;const int inf=0x3f3f3f3f;inline int read(){ int x=0,f=1;char ch=getchar(); while(!isdigit(ch)){
if(ch=='-')f=-1;ch=getchar();} while(isdigit(ch)){x=(x<<1)+(x<<3)+(ch^48);ch=getchar();} return x*f;} int head[N],tot,vis[N],dis[N],dis2[N],n,m;struct node{
int u,v,next,w;}e[M<<1];void insert(int u,int v,int w){ e[++tot]=(node){u,v,head[u],w};head[u]=tot; e[++tot]=(node){v,u,head[v],w};head[v]=tot;}void spfa(int s,int d[]){ queue
q; d[s]=0;q.push(s);vis[s]=1; while(!q.empty()){ int u=q.front();q.pop();vis[u]=0; for(int i=head[u];i;i=e[i].next){ int v=e[i].v,w=e[i].w; if(d[v]>d[u]+w){ d[v]=w+d[u]; if(!vis[v]) q.push(v),vis[v]=1; } } }}int u,v,w,ans;int main(){ n=read();m=read(); memset(dis,inf,sizeof dis); memset(dis2,inf,sizeof dis2); rep(i,1,m){ u=read(),v=read(),w=read(); insert(u,v,w);} spfa(1,dis); spfa(n,dis2); ans=inf; rep(i,1,n) for(int j=head[i];j;j=e[j].next){ int v=e[j].v,w=e[j].w; if(dis[n]

 

转载于:https://www.cnblogs.com/asdic/p/9578873.html

你可能感兴趣的文章
django Rest Framework
查看>>
图像标注工具labelImg安装方法(win7+Python3.5+Qt5)
查看>>
Oracle与SQL Server 的部分异同(随时更新)
查看>>
5. TCP客户/服务器程序示例
查看>>
MacOS下Python的多版本管理(pyenv)
查看>>
转载:.net中Cookie的用法
查看>>
ASP.NET SignalR 与 LayIM2.0 配合轻松实现Web聊天室(十一) 代码重构使用反射工厂解耦...
查看>>
SIT&UAT
查看>>
可变类型变量(列表、字典等)定为函数默认值时的陷阱
查看>>
颓の第17周
查看>>
bzoj1233[USACO2009 Open]Tower of Hay干草金字塔
查看>>
class10_Frame 框架
查看>>
curl -w,–write-out参数详解
查看>>
ssm+easyUI datagrid 不能显示后台controller层返回的json数据
查看>>
JAVA算术运算符
查看>>
JAVA循环结构
查看>>
mybatis10--自连接多对一查询
查看>>
整流电路
查看>>
[微博]微博信息检索的一般流程
查看>>
PHP常用函数
查看>>