HDU 6181 Two Paths 次短路
来源:互联网 发布:cms远程监控设置 编辑:程序博客网 时间:2024/05/21 10:17
题目
HDU 6181
分析
裸的次短路,直接套k短路模板就行了。有兴趣的读者可以看我讲k短路的博客,是利用
代码
#include <cstring>#include <cstdio>#include <queue>using namespace std;typedef long long int LL;const int INF = 0x3f3f3f3f;const int N = 100005;struct state{ LL u, g, h; bool operator < (const state &x) const { return g + h > x.g + x.h; }};struct edge{int to, cost;};vector<edge> G1[N]; // 原图vector<edge> G2[N]; // 反向图int s, t, k; // s 起点,t 终点,k 第k短路。int n, m; // n个点,m条边LL d[N];void spfa(int s){ int In_que[N] = {0}; memset(d, INF, sizeof(d)); queue<int> Q; Q.push(s); d[s] = 0; In_que[s] = 1; while (!Q.empty()) { int u = Q.front(); Q.pop(); In_que[u] = 0; for (unsigned i = 0; i < G2[u].size(); i++) { edge e = G2[u][i]; int v = e.to, dd = d[u] + e.cost; if (d[v] > dd) { d[v] = dd; if (!In_que[v]) { Q.push(v); In_que[v] = 1; } } } }}void Astar(){ int cnt[N] = {0}; priority_queue<state> Q; Q.push({s, 0, d[s]}); while (!Q.empty()) { state cur = Q.top(); Q.pop(); int u = cur.u; cnt[u]++; if (cnt[u] == k && u == t) { printf("%I64d\n", cur.g); break; } if (cnt[u] > k) continue; for (unsigned i = 0; i < G1[u].size(); i++) { edge e = G1[u][i]; if (cnt[e.to] != k) Q.push({e.to, cur.g + e.cost, d[e.to]}); } }}void K_Path(int s_val, int t_val, int k_val){ s = s_val; t = t_val; k = k_val; spfa(t); Astar();}int main(){ //freopen("test.txt", "r", stdin); //freopen("out.txt", "w", stdout); int T; scanf("%d", &T); while (T--) { for (int i = 0; i < N; i++) { G1[i].clear(); G2[i].clear(); } scanf("%d%d", &n, &m); for (int i = 0; i < m; i++) { int u, v, c; scanf("%d%d%d", &u, &v, &c); G1[u].push_back({v, c}); G1[v].push_back({u, c}); G2[v].push_back({u, c}); G2[u].push_back({v, c}); } K_Path(1, n, 2); } return 0;}
阅读全文
0 0
- HDU 6181 Two Paths (次短路)
- hdu 6181 Two Paths (次短路)
- hdu 6181 Two Paths(次短路)
- Hdu 6181 Two Paths【次短路】
- hdu-6181 Two Paths次短路
- HDU 6181 Two Paths 次短路
- hdu 6181 Two Paths (次短路)
- hdu 6181 Two Paths -最短路条数+次短路
- HDU 6181 Two Paths【次短路】【模板题】
- HDU 6181 Two Paths(次短路变形)
- [hdu 6181 Two Paths] Dijkstra求次短路
- Two Paths HDU 次短路问题
- 2017 Multi-University Training Contest 10 1011 Two Paths HDU 6181 (次短路+最短路数量)
- hdu 6181 Two Paths(次短路径长度)POJ 3255 Roadblocks ( 次短路长度)
- HDU6181 Two Paths【次短路】
- hdu Two Paths 次短路模板 (可往回走)
- 2017 Multi-University Training Contest 10 1011 Two Paths HDU 6181 (次短路)
- 2017 第十场多校训练 HDU 6181 Two Paths 次短路+Dijkstra
- druid1.1.2 学习笔记
- UnionFInd-----130. Surrounded Regions
- 最小生成树
- idea2017.2 静态资源热部署
- 情感天地
- HDU 6181 Two Paths 次短路
- 使用webpack打包.css文件时需要注意的事项
- 单机伪分布式环境搭建(配置Hadoop)
- 内联框架
- 模型视图设计模式
- 使用jad批量反编译.class文件
- hdu1243求最长公共字串的权值
- Zookeeper Golang客户端:go-zookeeper的基本使用
- List,Set,Map | ArrayList,Vector,LinkedList | HashMap,HashMap