HDU-2017 多校训练赛10-1011-Two Paths
来源:互联网 发布:深圳网络金融公司 编辑:程序博客网 时间:2024/06/07 03:04
ACM模版
描述
题解
这个题是裸的次短路算法,用
代码
#include <iostream>#include <cstdio>#include <queue>#include <cstring>using namespace std;typedef long long ll;const ll INF = 1e18;const int MAXN = 1e5 + 5;int n, m;int tot, st, ed, k;ll dis[MAXN];int hed1[MAXN];int hed2[MAXN];bool vis[MAXN];struct Edge{ int u, v, nxt1, nxt2; ll c; Edge() {} Edge(int _u, int _v, ll _c) : u(_u), v(_v), c(_c) {}} e[MAXN << 1];struct qnode{ int v; ll c; qnode() {} qnode(int _v, ll _c) : v(_v), c(_c) {} bool operator < (const qnode &rhs) const { return c + dis[v] > rhs.c + dis[rhs.v]; }};void addedge(int u, int v, ll c){ e[tot] = Edge(u, v, c); e[tot].nxt1 = hed1[u]; hed1[u] = tot; e[tot].nxt2 = hed2[v]; hed2[v] = tot++;}void dij(int src){ memset(vis, false, sizeof(vis)); for (int i = 1; i <= n; i++) { dis[i] = INF; } dis[src] = 0; priority_queue<qnode> que; que.push(qnode(src, 0)); while (!que.empty()) { qnode pre = que.top(); que.pop(); if (vis[pre.v]) { continue; } vis[pre.v] = true; for (int i = hed2[pre.v]; i != -1; i = e[i].nxt2) { if (dis[e[i].u] > dis[pre.v] + e[i].c) { dis[e[i].u] = dis[pre.v] + e[i].c; que.push(qnode(e[i].u, 0)); } } }}ll a_star(int src){ priority_queue<qnode> que; que.push(qnode(src, 0)); k--; while (!que.empty()) { qnode pre = que.top(); que.pop(); if (pre.v == ed) { if (k) { k--; } else { return pre.c; } } for (int i = hed1[pre.v]; i != -1; i = e[i].nxt1) { que.push(qnode(e[i].v, pre.c + e[i].c)); } } return -1;}int main(){ int T; scanf("%d", &T); while (T--) { tot = 0; memset(hed1, -1, sizeof(hed1)); memset(hed2, -1, sizeof(hed2)); scanf("%d%d", &n, &m); int u, v; ll c; for (int i = 0; i < m; i++) { scanf("%d%d%lld", &u, &v, &c); addedge(u, v, c); addedge(v, u, c); } st = 1, ed = n, k = 2; dij(ed); if (st == ed) { k++; } printf("%lld\n", a_star(st)); } return 0;}
阅读全文
0 0
- HDU-2017 多校训练赛10-1011-Two Paths
- 2017 第十场多校训练 HDU 6181 Two Paths 次短路+Dijkstra
- HDU-2017 多校训练赛9-1010-Two strings
- 【多校训练】hdu 6181 Two Paths 次短路径 Dijkstra
- HDU 6170 && 2017 多校训练:Two strings(DP)
- 2017多校训练赛第九场 HDU 6170 Two String(dp)
- HDU-2017 多校训练赛2-1011-Regular polygon
- HDU-2017 多校训练赛6-1011-Classes
- HDU-2017 多校训练赛7-1011-Kolakoski
- HDU-2017 多校训练赛8-1011-Killer Names
- HDU-2017 多校训练赛10-1010-Schedule
- HDU-2017 多校训练赛10-1008-Monkeys
- HDU-2017 多校训练赛10-1002-Array Challenge
- HDU-2017 多校训练赛10-1001-Admiral
- HDU-2017 多校训练赛10-补题
- HDU-2017 多校训练赛1-1006-Function
- HDU-2017 多校训练赛1-1002-Balala Power!
- HDU-2017 多校训练赛1-补题
- 冒泡排序
- kmp算法
- 熵、信息增益
- 基于tcp自己实现简单的HTTP服务器
- 数组的简单二分查找
- HDU-2017 多校训练赛10-1011-Two Paths
- 【POJ】2566
- FreeRTOS系统
- Java进阶(三十三)java基础-filter
- HDU 5269 ZYB loves Xor I 01trie
- 成员变量、类变量和局部变量的区别
- (九)事件的激活与调度
- HDU 2089 不要62 & HDU 3652 B-number(初级数位DP)
- 基于外部一个省市联动js框架,实现初始化特定的地址级联