题目链接->

题解:

次短路模板。

代码:

#include<cstdio>
#include<iostream>
using namespace std;
#define inf 1e9
#define N 100005
#define S1 dis[x]+e[i].v
#define S2 sdis[x]+e[i].v
using namespace std;
struct node {
int to,next,v;
} e[N<<];
int head[N],cnt;
void insert(int x, int y, int v) {
e[++cnt].to=y;
e[cnt].next=head[x];
e[cnt].v=v;
head[x]=cnt;
}
int n,m,dis[N],sdis[N],q[N<<];
bool inq[N];
void SPFA() {
for(int i=; i<=n; i++)dis[i]=sdis[i]=inf;
dis[]=;
q[]=inq[]=;
int l=,r=,t;
while (l<r) {
int x=q[l++];
for (int i=head[x]; i; i=e[i].next) {
t=e[i].to;
if (dis[t]>S1) {
sdis[t]=dis[t];
dis[t]=S1;
if (!inq[t])inq[t]=,q[r++]=t;
}
if (dis[t]<S1&&sdis[t]>S1) {
sdis[t]=S1;
if (!inq[t])inq[t]=,q[r++]=t;
}
if (sdis[t]>S2) {
sdis[t]=S2;
if (!inq[t])inq[t]=,q[r++]=t;
}
}
inq[x]=;
}
}
int main() {
cin>>n>>m;
for (int i=,x,y,v; i<=m; i++) {
cin>>x>>y>>v;
insert(x,y,v);
insert(y,x,v);
}
SPFA();
cout<<sdis[n];
return ;
}

spfa

#include <iostream>
#include <queue>
#include <cstdio>
#include <cstring>
#include <cstdlib>
const int MAX = ;
const int INF = 0x7fffffff;
using namespace std;
struct Edge {
int num,len;
bool operator <(const Edge &a)const {
return a.len < len;
}
}temp;
int u[MAX],v[MAX],w[MAX],dis[MAX],second[MAX],first[MAX / ],next[MAX],n,r;
void dijkstra() {
priority_queue<Edge> que;
dis[] = ;
second[] = INF;
for(int i = ; i < n; i++) dis[i] = second[i] = INF;
temp.len = temp.num = ;
que.push(temp);
while(!que.empty()) {
Edge head = que.top();
que.pop();
if(head.len > second[head.num]) continue;
int k = first[head.num];
while(k != -) {
int d = head.len + w[k];
if(dis[v[k]] > d) {
swap(dis[v[k]], d);
temp.len = dis[v[k]];
temp.num = v[k];
que.push(temp);
}
if(dis[v[k]] < d && second[v[k]] > d) {
second[v[k]] = d;
temp.len = second[v[k]];
temp.num = v[k];
que.push(temp);
}
k = next[k];
}
}
}
int main() {
scanf("%d%d",&n,&r);
memset(first, -, sizeof(first));
for(int i = ; i < r; i++) {
scanf("%d%d%d",&u[i],&v[i],&w[i]);
u[i]--,v[i]--,next[i] = first[u[i]],first[u[i]] = i,u[i + r] = v[i];
v[i + r] = u[i],w[i + r] = w[i],next[i + r] = first[u[i + r]],first[u[i + r]] = i + r;
}
dijkstra();
printf("%d",second[n-]);
return ;
}

dijkstra

一世安宁

POJ Remmarguts' Date的更多相关文章

  1. 【POJ】【2449】Remmarguts' Date

    K短路/A* 经(luo)典(ti) K短路题目= = K短路学习:http://www.cnblogs.com/Hilda/p/3226692.html 流程: 先把所有边逆向,做一遍dijkstr ...

  2. poj 2449 Remmarguts' Date(第K短路问题 Dijkstra+A*)

    http://poj.org/problem?id=2449 Remmarguts' Date Time Limit: 4000MS   Memory Limit: 65536K Total Subm ...

  3. poj 2449 Remmarguts' Date (k短路模板)

    Remmarguts' Date http://poj.org/problem?id=2449 Time Limit: 4000MS   Memory Limit: 65536K Total Subm ...

  4. 图论(A*算法,K短路) :POJ 2449 Remmarguts' Date

    Remmarguts' Date Time Limit: 4000MS   Memory Limit: 65536K Total Submissions: 25216   Accepted: 6882 ...

  5. poj 2449 Remmarguts' Date 第k短路 (最短路变形)

    Remmarguts' Date Time Limit: 4000MS   Memory Limit: 65536K Total Submissions: 33606   Accepted: 9116 ...

  6. POJ 2449 Remmarguts' Date (第k短路径)

    Remmarguts' Date Time Limit: 4000MS   Memory Limit: 65536K Total Submissions:35025   Accepted: 9467 ...

  7. POJ 2449Remmarguts' Date 第K短路

    Remmarguts' Date Time Limit: 4000MS   Memory Limit: 65536K Total Submissions: 29625   Accepted: 8034 ...

  8. [poj2449]Remmarguts' Date(spfa+A*)

    转载请注明出处: http://www.cnblogs.com/fraud/          ——by fraud Remmarguts' Date Time Limit: 4000MS   Mem ...

  9. POJ:2449-Remmarguts' Date(单源第K短路)

    Remmarguts' Date Time Limit: 4000MS Memory Limit: 65536K Total Submissions: 33081 Accepted: 8993 Des ...

随机推荐

  1. Android之ProgressDialog的使用

    ProgressDialog 继承自AlertDialog,AlertDialog继承自Dialog,实现DialogInterface接口. ProgressDialog的创建方式有两种,一种是ne ...

  2. 单元测试工具Junit浅谈

    什么是单元测试?   写了一个类和一些方法,给别人用,会不会有bug?那就测一下这些方法吧 怎么测?   用main方法测?不能一起运行,需要人为观察输出是否正确,测试效率低 单元测试能带来什么好处? ...

  3. [20170914]tnsnames.ora的管理.txt

    [20170914]tnsnames.ora的管理.txt --//昨天朋友讲tnsnams.ora的内容太长了,而且许多不需要的.管理不方便.我记得以前写[20150409]tnsnames.ora ...

  4. 洗礼灵魂,修炼python(38)--面向对象编程(8)—从算术运算符进一步认识魔法方法

    上一篇文章了解了魔法方法,相信你已经归魔法方法至少有个概念了,那么今天就进一步的认识魔法方法.说这个之前,大脑里先回忆一下算术操作符. 什么是算术操作符?忘记没有?忘记了的自己倒回去看我前面的博文或者 ...

  5. 【 PostgreSQL】查询某模式下所有表的分布键信息

    想看下某模式下所有表创建的分布键是否合理,查找系统表文档拼出如下sql,亲们如果有更好的sql或者意见欢迎留言! ​SELECT     aaa.nspname AS "模式名", ...

  6. macOS 下NFS 文件系统挂载

    主要有两种方式: 使用:resvport选项, mount 挂载命令时. 使用:insecure选项, exportfs 文件配置时. sudo mount -o resvport IP:Addr b ...

  7. JavaScipt中的Math.ceil() 、Math.floor() 、Math.round()、Math.pow() 三个函数的理解

    以前一直会三个函数的使用产生混淆,现在通过对三个函数的原型定义的理解,其实很容易记住三个函数. 现在做一个总结: 1. Math.ceil()用作向上取整. 2. Math.floor()用作向下取整 ...

  8. CPU指令分类

    指令可以分为三类: 有运算单元参与:compq.subq 无运算单元参与:jge.movq MOV指令可以在CPU内或CPU和存储器之间传送字或字节,它传送的信息可以从寄存器到寄存器,立即数到寄存器, ...

  9. Android事件处理第一节(View对Touch事件的处理)

    http://ipjmc.iteye.com/blog/1694146 在Android里Touch是很常用的事件,尤其实在自定义控件中,要实现一些动态的效果,往往要对Touch进行处理.Androi ...

  10. mysql 创建 mb4 字符集数据库

    create database sina default character set utf8mb4 collate utf8mb4_unicode_ci; show variables like ' ...