次短路经(dijsktra)
#include <cstdio>
#include <cstring>
#include <queue>
#include <algorithm>
#define MAXN (5000 + 10)
#define INF (5000*5000*2)
using namespace std;
struct edge{
int to, cost;
edge(int tv = 0, int tc = 0):
to(tv), cost(tc){}
};
typedef pair<int ,int> P;
int N, R;
vector<edge> graph[MAXN];
int dist[MAXN]; //最短距离
int dist2[MAXN]; //次短距离
void solve(){
fill(dist, dist+N, INF);
fill(dist2, dist2+N, INF);
//从小到大的优先队列
//使用pair而不用edge结构体
//是因为这样我们不需要重载运算符
//pair是以first为主关键字进行排序
priority_queue<P, vector<P>, greater<P> > Q;
//初始化源点信息
dist[0] = 0;
Q.push(P(0, 0));
//同时求解最短路和次短路
while(!Q.empty()){
P p = Q.top(); Q.pop();
//first为s->to的距离,second为edge结构体的to
int v = p.second, d = p.first;
//当取出的值不是当前最短距离或次短距离,就舍弃他
if(dist2[v] < d) continue;
for(unsigned i = 0; i < graph[v].size(); i++){
edge &e = graph[v][i];
int d2 = d + e.cost;
、
if(dist[e.to] > d2){
swap(dist[e.to], d2);
Q.push(P(dist[e.to], e.to));
}
if(dist2[e.to] > d2 && dist[v] < d2){
dist2[e.to] = d2;
Q.push(P(dist2[e.to], e.to));
}
}
}
printf("%d\n", dist2[N-1]);
}
int main(){
int A, B, D;
scanf("%d%d", &N, &R);
for(int i = 0; i < R; i++){
scanf("%d%d%d", &A, &B, &D);
graph[A-1].push_back(edge(B-1, D));
graph[B-1].push_back(edge(A-1, D));
}
solve();
return 0;
}
次短路经(dijsktra)的更多相关文章
- HDU 1546 Idiomatic Phrases Game(最短路,Dijsktra,理解题意很重要)
题目 1.注意因为要判断能不能到达,所以要在模版里面判断k有没有更新. 2.看懂题目意思和案例的解法很重要. #define _CRT_SECURE_NO_WARNINGS //题目大意:现要进行单词 ...
- hdu 3790 最短路径问题(最短路,Dijsktra)
题目 Dijsktra基础题,只是多了一个花费,稍稍变动处理就好 #define _CRT_SECURE_NO_WARNINGS #include<string.h> #include&l ...
- K短路
K短路 用dijsktra+A*启发式搜索当点v第K次出堆的时候,这时候求得的路径是k短路.A*算法有一个启发式函数f(p)=g(p)+h(p), 即评估函数=当前值+当前位置到终点的最短距离g(p) ...
- 【转】K短路
K短路 用dijsktra+A*启发式搜索 当点v第K次出堆的时候,这时候求得的路径是k短路.A*算法有一个启发式函数f(p)=g(p)+h(p), 即评估函数=当前值+当前位置到终点的最短距离g(p ...
- HDU1548:A strange lift(Dijkstra或BFS)
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1548 题意:电梯每层有一个数,例如第n层有个数k, 那么这一层只能上k层或下k层,但是不能低于一层或高 ...
- poj 3013 Big Christmas Tree
Big Christmas Tree Time Limit: 3000MS Memory Limit: 131072K Total Submissions: 20974 Accepted: 4 ...
- Hdu-2112 HDU Today (单源多点最短路——Dijsktra算法)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2112 题目大意:给你N个公交车站,起点,终点,各站之间的距离,求起点到终点之间的最短距离.(起点终点相 ...
- 【BZOJ-4456】旅行者 分治 + 最短路
4456: [Zjoi2016]旅行者 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 254 Solved: 162[Submit][Status] ...
- 【BZOJ-2725】故乡的梦 Dijsktra + Tarjan + Dinic + BFS + 堆
2725: [Violet 6]故乡的梦 Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 502 Solved: 173[Submit][Status ...
- 最短路径BellmanFord , Dijsktra
最短路径算法也是常用的图算法,在网上看到了一份c的代码,写的很清楚,今天有空给写成java的了,就当练手了.另,算法导论362页详细介绍了Bellman-Ford算法,本来打算再写个Dijsktra算 ...
随机推荐
- 洛谷 P2053 [SCOI2007]修车 解题报告
P2053 [SCOI2007]修车 题目描述 同一时刻有N位车主带着他们的爱车来到了汽车维修中心.维修中心共有M位技术人员,不同的技术人员对不同的车进行维修所用的时间是不同的.现在需要安排这M位技术 ...
- 利用MSXSL.exe绕过AppLocker应用程序控制策略
1.需要用到微软工具MSXSL.exe,msxsl.exe是微软用于命令行下处理XSL的一个程序,所以通过他,我们可以执行JavaScript进而执行系统命令,其下载地址为: https://www. ...
- 线性判别分析(Linear Discriminant Analysis)
1. 问题 之前我们讨论的PCA.ICA也好,对样本数据来言,可以是没有类别标签y的.回想我们做回归时,如果特征太多,那么会产生不相关特征引入.过度拟合等问题.我们可以使用PCA来降维,但PCA没有将 ...
- Codeforces 895.C Square Subsets
C. Square Subsets time limit per test 4 seconds memory limit per test 256 megabytes input standard i ...
- eclipse中配置jbpm3.2插件
1.什么是jbpm?为什么要使用jbpm呢? 通俗一点讲,jbpm是一个负责管理工作流的一个产品,那么什么是工作流呢,所谓的工作流就是在办公自动化系统中,提交申请,申请经过多个部门领导审批,完成该流程 ...
- python使用snappy压缩
今天在网上找了很久,终于找到1个snappy压缩命令行,记录下来: 1.wget https://bootstrap.pypa.io/get-pip.py 2.python ./get-pip.py ...
- 如何在WIndows电脑上安装 SVN Server 实现代码版本控制
One 下载-安装 SVN SVNServer 先去官网下载服务器版本的svn server,下载地址 :https://www.visualsvn.com/server/download/ 选 ...
- Jenkins使用教程之用户权限管理(包含插件的安装)
在工作的过程中由于分工合作的关系,我们因为工作内容的不同可能分为不同的组织里,但是jenkins默认的权限管理并没有用户组的概念,所以我们需要第三方插件的支持来解决问题.插件:Role-based A ...
- 2017北京国庆刷题Day2 afternoon
期望得分:100+100+50=250 实际得分:100+70+50=220 T1 最大值(max) Time Limit:1000ms Memory Limit:128MB 题目描述 LYK有一 ...
- Atcoder #017 agc017 D.Game on Tree 树上NIM 博弈
LINK 题意:树上NIM的模板题,给出一颗树,现有操作删去端点不为根节点的边,其另一端节点都将被移除,不能取者为败 思路:一看就是个NIM博弈题,只是搬到树上进行,树上DFS进行异或 记得#014D ...