POJ - 3255 次短路径
题意:给你无向带权图,求次短路径
题解:加一个次短路的数组,用于距记录源点到此点的次短路长度,注意初始化是源点到自己的次短路是极大值
接着再使用dijkstra算法,它是每次选用现在连上(记录了)的点与其他点的最小权值的边去更新其他所有的点
就是在dij的算法上进行简单的修改,需要修改的是每次最短路更新之后再更新次短路,但是保证更新的次短路大于记录的次短路并小于记录的最短路
#include<cstdio>
#include<cstring>
#include<queue>
#include<vector>
using namespace std;
const int inf=<<;
const int maxn=;
struct Edge
{
int v,val;
Edge(int v,int val):v(v),val(val) {}
bool operator < (const Edge &c)const//改写大顶堆成为小顶堆
{
return val>c.val;
}
};
vector<Edge> vec[maxn];
int dis[maxn],secondis[maxn];//记录第二短路径
void init(int n)
{
for(int i=; i<=n; ++i)
{
vec[i].clear();
}
}
void dijkstraSecond(int n,int s)
{
priority_queue<Edge> pque;
for(int i=; i<=n; ++i)
{
dis[i]=inf;
secondis[i]=inf;//注意初始化
}
//secondis[s]=0;//不能初始化
dis[s]=;
pque.push(Edge(s,));
while(!pque.empty())
{
Edge disE=pque.top();
pque.pop();
if(secondis[disE.v]<disE.val)//注意次短路都失败了才不能加上这条路
continue;
for(int i=; i<vec[disE.v].size(); ++i)
{
Edge endE=vec[disE.v][i];
int disnow=disE.val+endE.val;//注意这儿不能用dis求
if(dis[endE.v]>disnow)//松弛最短路
{
swap(dis[endE.v],disnow);//由于松弛次短路,所以这儿是交换两者
pque.push(Edge(endE.v,dis[endE.v]));
}
if(secondis[endE.v]>disnow&&dis[endE.v]<disnow)//松弛次短路
{
secondis[endE.v]=disnow;
pque.push(Edge(endE.v,secondis[endE.v]));
}
}
}
}
int main()
{
int n,m;
while(~scanf("%d %d",&n,&m))
{
init(n);
while(m--)
{
int u,v,c;
scanf("%d %d %d",&u,&v,&c);
vec[u].push_back(Edge(v,c));
vec[v].push_back(Edge(u,c));
}
dijkstraSecond(n,);
// for(int i=1; i<=n; ++i)
// {
// printf("secondis[i]=%d\n",secondis[i]);
// }
printf("%d\n",secondis[n]);
}
return ;
}
POJ - 3255 次短路径的更多相关文章
- POJ 3255 Roadblocks (Dijkstra求最短路径的变形)(Dijkstra求次短路径)
Roadblocks Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 16425 Accepted: 5797 Descr ...
- POJ - 3255 SPFA+邻接表求次短路径
题意:给出m条边 , n个顶点,u [ i ]到v [ i ] 的距离w [ i ],求除了最短路的那条最短的边的长度. 思路:之前有做过相似的题,使用迪杰斯特拉算法求单源最短路径,并且记录路径,枚举 ...
- 单源次短路径:poj:3255-Roadblocks
Roadblocks Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 17521 Accepted: 6167 Descripti ...
- 次最短路径 POJ 3255 Roadblocks
http://poj.org/problem?id=3255 这道题还是有点难度 要对最短路径的算法非常的了解 明晰 那么做适当的修改 就可以 关键之处 次短的路径: 设u 到 v的边权重为cost ...
- POJ 3255 Roadblocks(A*求次短路)
Roadblocks Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 12167 Accepted: 4300 Descr ...
- MST:Roadblocks(POJ 3255)
路上的石头 题目大意:某个街区有R条路,N个路口,道路双向,问你从开始(1)到N路口的次短路经长度,同一条边可以经过多次. 这一题相当有意思,现在不是要你找最短路径,而是要你找次短路经,而且次短 ...
- poj 3255 求次大最短路
Roadblocks Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 5508 Accepted: 2088 Descri ...
- POJ 3255 Roadblocks (次级短路问题)
解决方案有许多美丽的地方.让我们跳回到到达终点跳回(例如有两点)....无论如何,这不是最短路,但它并不重要.算法能给出正确的结果 思考:而最短的路到同一点例程.spfa先正达恳求一次,求的最短路径的 ...
- 学习笔记CB006:依存句法、LTP、n元语法模型、N-最短路径分词法、由字构词分词法、图论、概率论
依存句法分析,法国语言学家L.Tesniere1959年提出.句法,句子规则,句子成分组织规则.依存句法,成分间依赖关系.依赖,没有A,B存在错误.语义,句子含义. 依存句法强调介词.助词划分作用,语 ...
随机推荐
- 转发URL请求
如何用Netty实现一个轻量级的HTTP代理服务器 - Newland - 博客园 https://www.cnblogs.com/jietang/p/8926325.html 现在迫切希望有一个HT ...
- 聚币网API[Python3版]
代码 #!/usr/bin/env python # -*- coding:utf-8 -*- import hashlib import requests import time import ur ...
- JUnit4.12 源码分析(二)之TestRule
1. TestRule TestRule和@Before,@After,@BeforeClass,@AfterClass功能类似,但是更加强大; JUnit 识别TestRule的两种方式: 方法级别 ...
- View的几个坐标的问题 ,涉及到动画
event.getX():表示的是触摸的点距离自身左边界的距离 event.getY():表示的是触摸的点距离自身上边界的距离 event.getRawX:表示的是触摸点距离屏幕左边界的距离 eve ...
- Node.js REST 工具 Restify
Restify 是一个 Node.JS 模块,可以让你创建正确的 REST web services.它借鉴了很多 express 的设计,因为它是 node.js web 应用事实上的标准 API. ...
- Java基础—输入输出流
流的概念 在Java中,流是从源到目的地的字节的有序序列.Java中有两种基本的流——输入流(InputStream)和输出流(OutputStream). 根据流相对于程序的另一个端点的不同,分为节 ...
- PAT 1133 Splitting A Linked List[链表][简单]
1133 Splitting A Linked List(25 分) Given a singly linked list, you are supposed to rearrange its ele ...
- 在firefox安装Selenium IDE
1.打开地址:https://addons.mozilla.org/en-US/firefox/addon/selenium-ide/: 2.点击Add to Firefox: 3.打开Firefox ...
- 虚拟机——安装虚拟机时,提示intel VT-x处于禁用状态
1.联想Lenovo扬天T4900C-00安转虚拟机提示: 按F12进入bios模式,修改Intel VT-x为启用,BIOS中依次选择:Advanced(高级)——CPU Configuration ...
- gdb core
程序运行发生异常退出,比如segment错误,此时可以利用系统生成的core文件,配合GDB来定位问题. 问题程序: segment.c #include <stdio.h> #inclu ...