题意:给你无向带权图,求次短路径

题解:加一个次短路的数组,用于距记录源点到此点的次短路长度,注意初始化是源点到自己的次短路是极大值

   接着再使用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 ;
}

最新文章

  1. TDR测试原理
  2. nancy中视图呈现 Html.Partial(RenderPage的替代品)
  3. ✡ leetcode 169. Majority Element 求出现次数最多的数 --------- java
  4. 结对编程--基于android平台的黄金点游戏
  5. HTML5的文档结构和新增标签
  6. 清北学堂2017NOIP冬令营入学测试P4749 C’s problem(c)
  7. C#2.0 特性
  8. Linux的Cgroup
  9. hdu 4099 Revenge of Fibonacci Trie树与模拟数位加法
  10. [访问系统] C#计算机信息类ComputerInfo (转载)
  11. STL——heap的4大操作
  12. C# Best Practices - Specify Clear Method Parameters
  13. 手机端viewport的设置规范
  14. URL vs. HTML 录制模式
  15. Nubia Z5S 基于官方H207/4.4内核的Mokee4.4.4 RC3.2 (2014.7.31修复呼吸灯(能亮依旧不能呼吸))
  16. Spring Dynamic DataSource Routing
  17. IIS网站 由http协议改变为https协议
  18. sh - 脚本学习 启动/停止/重启/部署jetty crontab
  19. 安卓开发_WebView设置打开网页缩放问题
  20. C++ code:剩余串排列

热门文章

  1. 在nginx启动后,如果我们要操作nginx,要怎么做呢 别增加无谓的上下文切换 异步非阻塞的方式来处理请求 worker的个数为cpu的核数 红黑树
  2. JavaScript中的原型与原型链
  3. SpringBoot 配置文件 YML/Profile
  4. 19.Delete Documents-官方文档摘录
  5. C++开源库集合
  6. django+celery 实现定时任务
  7. shell脚本循环处理文件数据
  8. web Servlet 3.0 新特性之web模块化编程,web-fragment.xml编写及打jar包
  9. PHP的pm、pm.max_requests、memory_limit
  10. Springboot 日志管理配置logback-spring.xml