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存在错误.语义,句子含义. 依存句法强调介词.助词划分作用,语 ...
随机推荐
- CSS冲突1 要关掉的css在项目内:【material-table】 中 checkbox 点击checkbox无法选中or取消,点击旁边才能选中or取消
CSS优先级: !important > 行内样式 > 内嵌样式|链接外部样式(哪个在后面哪个优先级大) id选择器 > class选择器 > 元素选择器 react中好像还不 ...
- 16.Update Methods-官方文档摘录
这里没什么好说的,直接贴文了 MongoDB provides the following methods for updating documents in a collection: db.col ...
- Java-小技巧-005-double类型保留两位小数4种方法
4种方法,都是四舍五入,例: import java.math.BigDecimal; import java.text.DecimalFormat; import java.text.NumberF ...
- G729 详细使用文档
https://tools.ietf.org/html/rfc4749 git://git.linphone.org/linphone-android.git http://stackoverflow ...
- Apache Spark 2.0三种API的传说:RDD、DataFrame和Dataset
Apache Spark吸引广大社区开发者的一个重要原因是:Apache Spark提供极其简单.易用的APIs,支持跨多种语言(比如:Scala.Java.Python和R)来操作大数据. 本文主要 ...
- Springboot+shiro配置笔记+错误小结
软件152 尹以操 springboot不像springmvc,它没有xml配置文件,那该如何配置shiro呢,其实也不难,用java代码+注解来解决这个问题.仅以此篇记录我对shiro的学习,如有对 ...
- PAT 1110 Complete Binary Tree[比较]
1110 Complete Binary Tree (25 分) Given a tree, you are supposed to tell if it is a complete binary t ...
- web Servlet 3.0 新特性之web模块化编程,web-fragment.xml编写及打jar包
web Servlet 3.0 模块化 原本一个web应用的任何配置都需要在web.xml中进行,因此会使得web.xml变得很混乱,而且灵活性差,因此Servlet 3.0可以将每个Servlet. ...
- django内置 Contenttypes 框架
一.什么是Django ContentTypes? 1.Django 包含一个ContentTypes 应用,它可以追踪安装在你的Django 项目里的所有应用,并提供一个高层次的.通用的接口用于与你 ...
- (转)MFC中Doc,View,MainFrmae,App各指针的互相获取
App是应用域,所有的域中的东西都可以通过全局函数访问到它. MainFrame是主框架,也基本可以用全局函数访问到. MainFrame下是若干个ChildFrame,ChildFrame中若干个V ...