POJ - 3255 次短路径
题意:给你无向带权图,求次短路径
题解:加一个次短路的数组,用于距记录源点到此点的次短路长度,注意初始化是源点到自己的次短路是极大值
接着再使用dijkstra算法,它是每次选用现在连上(记录了)的点与其他点的最小权值的边去更新其他所有的点
就是在dij的算法上进行简单的修改,需要修改的是每次最短路更新之后再更新次短路,但是保证更新的次短路大于记录的次短路并小于记录的最短路
#include<cstdio> #include<cstring> #include<queue> #include<vector> using namespace std; const int inf=1<<29; const int maxn=200010; 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=0; i<=n; ++i) { vec[i].clear(); } } void dijkstraSecond(int n,int s) { priority_queue<Edge> pque; for(int i=0; i<=n; ++i) { dis[i]=inf; secondis[i]=inf;//注意初始化 } //secondis[s]=0;//不能初始化 dis[s]=0; pque.push(Edge(s,0)); while(!pque.empty()) { Edge disE=pque.top(); pque.pop(); if(secondis[disE.v]<disE.val)//注意次短路都失败了才不能加上这条路 continue; for(int i=0; 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,1); // for(int i=1; i<=n; ++i) // { // printf("secondis[i]=%d\n",secondis[i]); // } printf("%d\n",secondis[n]); } return 0; }
分类:
ACM_图论
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决