洛谷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 ...
随机推荐
- Tomcat启动web项目静态页面中文乱码问题解决
1 首先查看静态页面在编辑器中是否正常, 如果是eclipse ,需要设置一下项目编码格式为utf-8, 如果是idea , 一般会自动识别, 也可以自己手动检查一下, 检查html上面是否有 ...
- H5-地理定位/本地存储/拖放
一.地理定位 Geolocation 兼容性:Internet Explorer 9+, Firefox, Chrome, Safari 和 Opera 支持Geolocation(地理定位). 一次 ...
- JavaDailyReports10_15
2020-10-15 16:12:16 今天学习了如何实现倒计时控制程序的运行: 1 package timer; 2 3 import java.util.Calendar; 4 import ja ...
- 高效扩展工具让 VS Code 如虎添翼
Codelf 变量命名神器 Star:10688 https://github.com/unbug/codelf 新建项目,变量,类,方法,接口都需要命名,一个好的命名可以一眼看出这个地方的功能,Co ...
- maven方式使用jetty
Jetty 是一个开源的servlet容器,它为基于Java的web容器,例如JSP和servlet提供运行环境.Jetty是使用Java语言编写的,它的API以一组JAR包的形式发布.开发人员可以将 ...
- istio kiali 亲和性调度
一.节点调度 在开始 kiali 亲和性调度之前,先演示一个简单的例子介绍 pod 选择调度到指定 node: 节点打标 使用命令查看当前所有 k8s 节点: [root@k8s-master ~]# ...
- 风炫安全WEB安全学习第二十五节课 利用XSS键盘记录
风炫安全WEB安全学习第二十五节课 利用XSS键盘记录 XSS键盘记录 同源策略是浏览器的一个安全功能,不同源的客户端脚本在没有明确授权的情况下,不能读写对方资源.所以xyz.com下的js脚本采用a ...
- .NET 云原生架构师训练营(模块二 基础巩固 RabbitMQ 工作队列和交换机)--学习笔记
2.6.4 RabbitMQ -- 工作队列和交换机 WorkQueue Publish/Subscribe Routing EmitLog WorkQueue WorkQueue:https://w ...
- 使用Pr压缩视频,增大音量
视屏压缩(亲测有效教程):https://www.zhihu.com/question/67762625 音量增大(亲测有效教程):https://jingyan.baidu.com/article/ ...
- leetcode1637-两点之间不包括任何点的最宽垂直面积
题目 给你 n 个二维平面上的点 points ,其中 points[i] = [xi, yi] ,请你返回两点之间内部不包含任何点的 最宽垂直面积 的宽度. 垂直面积 的定义是固定宽度,而 y 轴上 ...