洛谷P2865 [USACO06NOV]Roadblocks G(次短路)
一个次短路的问题,可以套用dijkstra求最短路的方法,用dis[0][i]表示最短路;dis[1][i]表示次短路,优先队列中存有最短路和次短路,然后每次找到一条道路对他进行判断,更新最短或次短路,
注意求次短路时不要打标记,因为有可能再次访问到该节点。
最后的答案就是dis[1][n]。
1 #include<bits/stdc++.h>
2 using namespace std;
3 #define N 200010
4 int tot,head[N],to[N],w[N],nxt[N],n,m,dis[3][N];
5
6 void add(int x,int y,int z){
7 nxt[++tot]=head[x];head[x]=tot;
8 to[tot]=y;w[tot]=z;
9 }
10
11 struct node{//建立优先队列
12 int pos,dis;
13 friend bool operator<(node a,node b){
14 return a.dis>b.dis;
15 }
16 }tmp;
17
18 priority_queue<node> q;
19
20 void dij(){
21 for(int i=1;i<=n;i++){
22 dis[0][i]=dis[1][i]=2147483647;
23 }
24 dis[0][1]=0;
25 tmp.dis=0;tmp.pos=1;
26 q.push(tmp);
27 while(!q.empty()){
28 tmp=q.top();q.pop();
29 int u=tmp.pos,d=tmp.dis;
30 if(d>dis[1][u]) continue;//比最短路和次短路还要小,直接跳过
31 for(int i=head[u];i;i=nxt[i]){
32 int v=to[i];
33 if(dis[0][v]>d+w[i]){//比最短路小,更新最短路和次短路
34 dis[1][v]=dis[0][v];
35 tmp.dis=dis[0][v]=d+w[i];
36 tmp.pos=v;
37 q.push(tmp);
38 }
39 if(dis[1][v]>d+w[i]&&dis[0][v]<d+w[i]){//更新次短路
40 tmp.dis=dis[1][v]=d+w[i];
41 tmp.pos=v;
42 q.push(tmp);
43 }
44 }
45 }
46 }
47
48 int main(){
49 cin>>n>>m;
50 for(int i=1;i<=m;i++){
51 int a,b,c;
52 cin>>a>>b>>c;
53 add(a,b,c);add(b,a,c);
54 }
55 dij();
56 cout<<dis[1][n];//输出起点到终点的次短路
57 }
洛谷P2865 [USACO06NOV]Roadblocks G(次短路)的更多相关文章
- 洛谷——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 ...
- 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 ...
- 洛谷P1879 [USACO06NOV]玉米田Corn Fields(状压dp)
洛谷P1879 [USACO06NOV]玉米田Corn Fields \(f[i][j]\) 表示前 \(i\) 行且第 \(i\) 行状态为 \(j\) 的方案总数.\(j\) 的大小为 \(0 \ ...
- 洛谷 P6218 [USACO06NOV] Round Numbers S
洛谷 P6218 [USACO06NOV] Round Numbers S 题目描述 如果一个正整数的二进制表示中,\(0\) 的数目不小于 \(1\) 的数目,那么它就被称为「圆数」. 例如,\(9 ...
- 【题解】洛谷P3119 Grass Cownoisseur G
题面:洛谷P3119 Grass Cownoisseur G 本人最近在熟悉Tarjan的题,刷了几道蓝题后,我飘了 趾高气扬地点开这道紫题,我一瞅: 哎呦!这不是分层图吗? 突然就更飘了~~~ 用时 ...
- 络谷 P2865 [USACO06NOV]路障Roadblocks
P2865 [USACO06NOV]路障Roadblocks 题目描述 Bessie has moved to a small farm and sometimes enjoys returning ...
- 洛谷 [USACO17OPEN]Bovine Genomics G奶牛基因组(金) ———— 1道骗人的二分+trie树(其实是差分算法)
题目 :Bovine Genomics G奶牛基因组 传送门: 洛谷P3667 题目描述 Farmer John owns NN cows with spots and NN cows without ...
- BZOJ1563/洛谷P1912 诗人小G 【四边形不等式优化dp】
题目链接 洛谷P1912[原题,需输出方案] BZOJ1563[无SPJ,只需输出结果] 题解 四边形不等式 什么是四边形不等式? 一个定义域在整数上的函数\(val(i,j)\),满足对\(\for ...
随机推荐
- npm、cnpm与package-lock.json的操作
来源:npm.cnpm与package-lock.json的操作_IT码农-爱吃辣条的博客-CSDN博客_cnpm lock package.json文件只能锁定大版本,也就是版本号的第一位,并不能锁 ...
- css基础03
就近原则执行粉色.而不是全覆盖,只有样式冲突的地方才会覆盖. 会执行粉色和12px.后来者居上 高度宽度内外边距这些不会继承. 子元素会继承行高, 1.5是行高是字体大小的1.5倍的意思. 有了!im ...
- node.js操作数据库
var sys = require('sys'); var Client = require('mysql').Client; var client = new Client(); client.us ...
- 越折腾越好用的 3 款开源 APP
高中的时候我特别喜欢捣鼓手机,然后我一个哥们儿在我的强烈推荐下买了个 HTC Dream(G1) 手机. G1 作为谷歌的第一个亲儿子,它出厂搭载的是 Android 1.5 系统,但当时已经出到了 ...
- 软件装在D盘,实测有效
C盘容量小,希望把所有软件都装到D盘,试过很多次,没什么作用.今天装MS全家桶的时候看到了个帖子,实测有效,Visio.Word.Excel.PowerPoint都装到了D盘 原贴链接为:http:/ ...
- Luogu1038 神经网络 (拓扑排序)
拓扑排序,裸的,水的. 第一发:题读错,输出错,输入错,到处错 \(\longrightarrow\) 40pts (excuse me ?) 第二发:漏了输入层特判 \(\longrightarro ...
- 基于Go语言的xmind读写库,我主要用来把有道云笔记思维导图转为xmind
项目地址 xmind 基于go语言的xmind接口 使用方法参考: example 本库主要加载xmind文件为json结构,保存文件时也用的json结构而不是xml结构 本库只做了最基本的主题添加功 ...
- 【小白必看】Redis手把手教你从零开始下载到安装,再到配置允许图形化工具远程连接(一)
一.Redis安装 本文暂时仅介绍Windows环境下Redis的安装. 由于Windows环境下没有.exe安装文件,这里我们使用"曲线救国"的.msi安装包帮助我们一站式解决安 ...
- 好好回答下 TCP 和 UDP 的区别
写了这么多篇关于 TCP 和 UDP 的文章,还没有好好聊过这两个协议的区别,这篇文章我们就来开诚布公的谈一谈. 关于 TCP 和 UDP ,想必大家都看过一张这样的图. 有一个小姑娘在对着瓶口慢慢的 ...
- SpringBoot中maven项目Plugins里resources报红
错误原因:刚开始下载依赖时下载错误导致的 参考:解决idea中maven plugins标红的问题 - 走看看 (zoukankan.com) 如果还不行: 就根据上面提示的地址找到maven的配置包 ...