洛谷P2865
感觉此题可作为严格次短路的模板,因此来写一写
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的更多相关文章
- 洛谷——P2865 [USACO06NOV]路障Roadblocks
P2865 [USACO06NOV]路障Roadblocks 题目描述 Bessie has moved to a small farm and sometimes enjoys returning ...
- 洛谷P2865 [USACO06NOV]路障Roadblocks——次短路
给一手链接 https://www.luogu.com.cn/problem/P2865 这道题其实就是在维护最短路的时候维护一下次短路就okay了 #include<cstdio> #i ...
- 【洛谷 P2865】 [USACO06NOV]路障Roadblocks(最短路)
题目链接 次短路模板题. 对每个点记录最短路和严格次短路,然后就是维护次值的方法了. 和这题一样. #include <cstdio> #include <queue> #in ...
- 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 ...
- 洛谷P2865 [USACO06NOV]Roadblocks G(次短路)
一个次短路的问题,可以套用dijkstra求最短路的方法,用dis[0][i]表示最短路:dis[1][i]表示次短路,优先队列中存有最短路和次短路,然后每次找到一条道路对他进行判断,更新最短或次短路 ...
- 洛谷1640 bzoj1854游戏 匈牙利就是又短又快
bzoj炸了,靠离线版题目做了两道(过过样例什么的还是轻松的)但是交不了,正巧洛谷有个"大牛分站",就转回洛谷做题了 水题先行,一道傻逼匈牙利 其实本来的思路是搜索然后发现写出来类 ...
- 洛谷P1352 codevs1380 没有上司的舞会——S.B.S.
没有上司的舞会 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description Ural大学有N个职员,编号为1~N.他们有 ...
- 洛谷P1108 低价购买[DP | LIS方案数]
题目描述 “低价购买”这条建议是在奶牛股票市场取得成功的一半规则.要想被认为是伟大的投资者,你必须遵循以下的问题建议:“低价购买:再低价购买”.每次你购买一支股票,你必须用低于你上次购买它的价格购买它 ...
- 洛谷 P2701 [USACO5.3]巨大的牛棚Big Barn Label:二维数组前缀和 你够了 这次我用DP
题目背景 (USACO 5.3.4) 题目描述 农夫约翰想要在他的正方形农场上建造一座正方形大牛棚.他讨厌在他的农场中砍树,想找一个能够让他在空旷无树的地方修建牛棚的地方.我们假定,他的农场划分成 N ...
随机推荐
- sql字段拆分 ,连表子查询获取值
1.连表子查询获取值 select bas.name,bas.id_card_num,bas.mobil_no,gender,bas.birthday,bas.height,bas.weight,pr ...
- Java Tree 树 数据结构
说到树结构就不得不回顾 链表结构 https://www.cnblogs.com/easyidea/p/13371863.html 如果链表结构中再多一个指针会是什么情况? 是不是像树根一样,这就是 ...
- python谷歌序列化传输
今日破解某app加密app当中用到了谷歌序列化传输 1.请求序列化文件 # Generated by the protocol buffer compiler. DO NOT EDIT! # sour ...
- 云计算之4---Cockpit
cockpit是一个简单可用的监控工具,你可以添加多个主机进行监控,上限是20台 .也可以使用cockpit来管理虚拟机/容器,也可以安装其他组件开启更多功能. 注意:cockpit没有告警功能,不适 ...
- Linux 时间同步 04 ntp时间同步
Linux 时间同步 04 ntp时间同步 目录 Linux 时间同步 04 ntp时间同步 安装ntp 配置与外部时间服务器进行时间同步的客户端主机 配置其他客户端与以上客户端主机时间同步 验证查看 ...
- 一文搞懂Java引用拷贝、深拷贝、浅拷贝
刷题.面试中,我们可能会遇到将一个对象的属性赋值到另一个对象的情况,这种情况就叫做拷贝.拷贝与Java内存结构息息相关,搞懂Java深浅拷贝是很必要的! 在对象的拷贝中,很多初学者可能搞不清到底是拷贝 ...
- Logstash学习之路(二)Elasticsearch导入json数据文件
一.数据从文件导入elasticsearch 1.数据准备: 1.数据文件:test.json 2.索引名称:index 3.数据类型:doc 4.批量操作API:bulk {"index& ...
- 小米11和iPhone11 哪个好
小米11:搭载最新一代三星的AMOLED屏幕,120Hz屏幕刷新iPhone11采用6.1英寸的分辨率1792828的LCD屏幕小米手机爆降800 优惠力度空前机会不容错过https://www.xi ...
- R语言学习笔记-Corrplot相关性分析
示例图像 首先安装需要的包 install.packages("Corrplot") #安装Corrplot install.packages("RColorBrewer ...
- TypeLoadException: 未能从程序集“ECS.GUI.Define, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null”中加载类型“ECS.GUI.Define.ArmgAimPos”,因为它在 4 偏移位置处包含一个对象字段,该字段已由一个非对象字段不正确地对齐或重叠
TypeLoadException: 未能从程序集"ECS.GUI.Define, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null ...