感觉此题可作为严格次短路的模板,因此来写一写

Description

给定 \(n\) 个点,\(r\) 条双向道路,求从 \(1\) 号点到 \(n\) 号点的严格次短路

Solution

维护两个变量,最短路和次短路

\(Dis[i][0]\) 表示从 \(1\) 号点到 \(i\) 号点的最短路,\(Dis[i][1]\) 表示从 \(1\) 号点到 \(i\) 号点的次短路

然后考虑什么情况下会对最短路或次短路的更新造成影响

设 \(fr\) 是当前节点,\(to\) 是当前节点连出去的某个节点

当 \(Dis[to][0]>Dis[fr][0]+e[i].dis\) 时,表明当前点 \(to\) 的最短路不再是最短的,就把当前最短路更新成次短路,然后再更新最短路

当 \(Dis[to][1]>Dis[fr][1]+e[i].dis\) 时,发现当前点 \(to\) 的次短路可以更短,但对最短路无影响,就只更新次短路

当 \(Dis[to][1]>Dis[fr][0]+e[i].dis\) 并且 \(Dis[to][0]<Dis[fr][0]+e[i].dis\) 时,表明当前点 \(to\) 的次短路可以更新,而最短路已经是最优,则只更新次短路

综上,每次按上述方法更新每条边,就可以求出到每个点的严格次短路

最后答案就是 \(Dis[n][1]\)

Code

#include<queue>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#define maxn 5010
#define LL long long
#define uLL unsigned long long using namespace std; queue<int> q;
int n,r,tot,head[maxn];
int Dis[maxn][3],vis[maxn];
struct edge{int fr,to,dis,nxt;}e[maxn<<1]; inline int read(){
int s=0,w=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-') w=-1;ch=getchar();}
while(ch>='0'&&ch<='9') s=(s<<1)+(s<<3)+ch-'0',ch=getchar();
return s*w;
} inline void add(int fr,int to,int dis){
e[++tot].fr=fr;e[tot].to=to;
e[tot].dis=dis;e[tot].nxt=head[fr];
head[fr]=tot;
} inline void SPFA(){
while(!q.empty()){
int u=q.front();q.pop();
for(int i=head[u];i;i=e[i].nxt){
int to=e[i].to,dis=e[i].dis;
if(Dis[to][0]>Dis[u][0]+dis){
Dis[to][1]=Dis[to][0];
Dis[to][0]=Dis[u][0]+dis;
if(!vis[to]) vis[to]=1,q.push(to);
}
if(Dis[to][1]>Dis[u][1]+dis){
Dis[to][1]=Dis[u][1]+dis;
if(!vis[to]) vis[to]=1,q.push(to);
}
if(Dis[to][1]>Dis[u][0]+dis&&Dis[to][0]<Dis[u][0]+dis){
Dis[to][1]=Dis[u][0]+dis;
if(!vis[to]) vis[to]=1,q.push(to);
}
}
}
} int main(){
n=read();r=read();
memset(Dis,63,sizeof Dis);
q.push(1);vis[1]=1;Dis[1][0]=0;
for(int i=1,fr,to,dis;i<=r;i++){
fr=read();to=read();dis=read();
add(fr,to,dis);add(to,fr,dis);
}
SPFA();printf("%d",Dis[n][1]);
return 0;
}

洛谷P2865的更多相关文章

  1. 洛谷——P2865 [USACO06NOV]路障Roadblocks

    P2865 [USACO06NOV]路障Roadblocks 题目描述 Bessie has moved to a small farm and sometimes enjoys returning ...

  2. 洛谷P2865 [USACO06NOV]路障Roadblocks——次短路

    给一手链接 https://www.luogu.com.cn/problem/P2865 这道题其实就是在维护最短路的时候维护一下次短路就okay了 #include<cstdio> #i ...

  3. 【洛谷 P2865】 [USACO06NOV]路障Roadblocks(最短路)

    题目链接 次短路模板题. 对每个点记录最短路和严格次短路,然后就是维护次值的方法了. 和这题一样. #include <cstdio> #include <queue> #in ...

  4. POJ——T 3255 Roadblocks|| COGS——T 315. [POJ3255] 地砖RoadBlocks || 洛谷—— P2865 [USACO06NOV]路障Roadblocks

    http://poj.org/problem?id=3255 Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 15680   ...

  5. 洛谷P2865 [USACO06NOV]Roadblocks G(次短路)

    一个次短路的问题,可以套用dijkstra求最短路的方法,用dis[0][i]表示最短路:dis[1][i]表示次短路,优先队列中存有最短路和次短路,然后每次找到一条道路对他进行判断,更新最短或次短路 ...

  6. 洛谷1640 bzoj1854游戏 匈牙利就是又短又快

    bzoj炸了,靠离线版题目做了两道(过过样例什么的还是轻松的)但是交不了,正巧洛谷有个"大牛分站",就转回洛谷做题了 水题先行,一道傻逼匈牙利 其实本来的思路是搜索然后发现写出来类 ...

  7. 洛谷P1352 codevs1380 没有上司的舞会——S.B.S.

    没有上司的舞会  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond       题目描述 Description Ural大学有N个职员,编号为1~N.他们有 ...

  8. 洛谷P1108 低价购买[DP | LIS方案数]

    题目描述 “低价购买”这条建议是在奶牛股票市场取得成功的一半规则.要想被认为是伟大的投资者,你必须遵循以下的问题建议:“低价购买:再低价购买”.每次你购买一支股票,你必须用低于你上次购买它的价格购买它 ...

  9. 洛谷 P2701 [USACO5.3]巨大的牛棚Big Barn Label:二维数组前缀和 你够了 这次我用DP

    题目背景 (USACO 5.3.4) 题目描述 农夫约翰想要在他的正方形农场上建造一座正方形大牛棚.他讨厌在他的农场中砍树,想找一个能够让他在空旷无树的地方修建牛棚的地方.我们假定,他的农场划分成 N ...

随机推荐

  1. Eclipse中,No compiler is provided in this environment. Perhaps you are running on a JRE rather than a

    问题说明 Eclipse导入Maven项目后,执行 mvn clean install后,出现如下错误: [INFO] ---------------------------------------- ...

  2. 解析STM32的库函数

    意法半导体在推出STM32微控制器之初,也同时提供了一套完整细致的固件开发包,里面包含了在STM32开发过程中所涉及到的所有底层操作.通过在程序开发中引入这样的固件开发包,可以使开发人员从复杂冗余的底 ...

  3. 5.从零开始创建一个QT窗口按钮

    如何创建一个QT项目 如何创建一个QT项目 1.创建新项目 2.配置选择 3.增加按钮 4.按钮和窗体的大小标签图标设置 5.信号与槽 6.自定义信号与槽 代码 1.创建新项目 点击文件->新建 ...

  4. ip,子网掩码,网关以及dns简述

    ip 描述 ip地址用于标识不同的计算机身份,ip地址=网络地址+主机地址 例子 192.168.1.168(ip地址)=192.168.1.0(网络地址)+0.0.0.168(主机地址) 寻址过程 ...

  5. chrome实现网页高清截屏(F12、shift+ctrl+p、capture)

    打开需要载屏的网页,在键盘上按下F12,出现以下界面 上图圈出的部分有可能会出现在浏览器下方,这并没有关系.此时按下 Ctrl + Shift + P(Mac 为 ⌘Command +⇧Shift + ...

  6. 二本非科班,秋招,实习,面试,offer之路

    不知不觉已经工作一年多的,我是2019年7月毕业的,但是如果算上实习就工作差不多两年了的吧. 最近不是刚刚过了圣诞节吗?然后又准备到元旦了,迎来2021年!在微信公众号上看到小部分公众号在总结2020 ...

  7. 浅析 MVC Pattern

    一.前言 最近做CAD插件相关的工作,用到了一些模式,解决对应场景的问题. 比如插件的运行实例上使用Singleton.实例内部使用了MVC(Strategy and Observer ). 针对CA ...

  8. 在Docker下进行MyCAT管理双主双从MySQL集群

    前言 在Docker下双主双从MySQL集群模拟 https://www.cnblogs.com/yumq/p/14259964.html 本文实验配置文件 Docker拉取MyCAT镜像 如果没启动 ...

  9. PHP 清除缓存文件

    /*清除缓存文件*/ public function clearRuntime() { $this->delFileByDir(RUNTIME_PATH); $this->success( ...

  10. Laya 踩坑日记-BitmapFont 不显示空格

    项目中有用到艺术字,美术通过 bmfont64 将字体导给我了,结果发现在应用上 空格不显示 如图: 今天去深究了一下这个问题,发现是底层没封装好,然后自己改了一下下面是改过的 BitmapFont ...