算法模板之次短路
来源:互联网 发布:淘宝客服打电话技巧 编辑:程序博客网 时间:2024/06/05 05:48
给你N个点和R条边,问从起点到终点的次短路是多少。无向边,且可重复走。
#include <cstdio> #include <cstring> #include <queue> #include <algorithm> #define MAXN 100009 #define INF 0x3f3f3f3f using namespace std; typedef long long ll; struct edge { int to, cost; edge(int tv = 0, int tc = 0): to(tv), cost(tc) {} }; typedef pair<ll,ll> P; int N, R; vector<edge> graph[MAXN]; ll dist[MAXN]; //最短距离 ll dist2[MAXN]; //次短距离 void solve() { memset(dist, 0x3f, sizeof(dist)); memset(dist2, 0x3f, sizeof(dist2)); priority_queue<P, vector<P>, greater<P> > Q; dist[1] = 0; Q.push(P(0, 1)); while(!Q.empty()) { P p = Q.top(); Q.pop(); int v = p.second; ll d = p.first; if(dist2[v] < d) continue; for(unsigned i = 0; i < graph[v].size(); i++) { edge &e = graph[v][i]; ll d2 = d + e.cost; if(dist[e.to] > d2) { swap(dist[e.to], d2); Q.push(P(dist[e.to], e.to)); } if(dist2[e.to] > d2 && dist[e.to] < d2) { dist2[e.to] = d2; Q.push(P(dist2[e.to], e.to)); } } } printf("%lld\n", dist2[N]); } int main() { int A, B, D; int t; scanf("%d",&t); while(t--) { scanf("%d%d", &N, &R); for(int i=0;i<=N;i++) graph[i].clear(); for(int i = 0; i < R; i++) { scanf("%d%d%d", &A, &B, &D); graph[A].push_back(edge(B, D)); graph[B].push_back(edge(A, D)); } solve(); } return 0; } /* Sample Input 2 3 3 1 2 1 2 3 4 1 3 3 2 1 1 2 1 Sample Output 5 3 */
阅读全文
0 0
- 算法模板之次短路
- POJ3255次短路模板
- 次短路模板
- poj3255次短路算法
- 最短路之弗洛伊德算法和模板
- 【最短路算法模板】
- 最短路算法模板
- 最短路算法模板
- POJ3255 Roadblocks dij求次短路 [模板]
- poj 3255 次短路+dijkstra+挑战模板
- hdu6181Two Paths(次短路模板题)
- hdu6181 Two Paths 次短路模板
- Dijkstra应用之次短路
- 【bzoj1726】 Usaco2006 Nov Roadblocks第二短路 次短路模板
- 最短路【SPFA】算法模板
- 模板_最短路算法
- 最短路SPFA算法模板
- 单源最短路 SPFA 算法模板
- THINKPHP字数限制,简介等使用,显示规定字数,剩余用...显示
- iOS开发:xcode无法选择设备和corner stone如何过滤上传文件
- 理解OAuth 2.0
- 将springBoot项目部署到docker入门实例
- 奖励
- 算法模板之次短路
- 使用Python和地图api进行地图数据采集
- VIM日志查找结果排序
- Android FOTA 升级流程
- android活动的声明周期
- Linux 增加归档日志删除脚本
- <Oracle优化新常态> 前半生
- gensim Word2vec
- sdut 数据结构实验之队列一:排队买饭