HDU-2017 多校训练赛9-1006-Senior Pan
来源:互联网 发布:如何关闭mac更新系统 编辑:程序博客网 时间:2024/06/06 21:59
ACM模版
描述
题解
官方题解:
比赛时知道是最短路,但是没有写出来,真无奈ㄟ( ▔, ▔ )ㄏ……
代码
#include <queue>#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;typedef long long ll;const ll INF = 0x3f3f3f3f3f3f3f3f;const int MAXN = 1e5 + 10;const int MAGIC = 20;struct Edge{ int v, val, net;} edg[MAXN];struct node{ int x; ll step;};int n, m, k, tot;int hed[MAXN];int a[MAXN];int vis[MAXN];ll dis[MAXN];priority_queue<node> pqn;bool operator < (node a, node b){ return a.step > b.step;}void addedge(int u, int v, int val){ edg[tot].v = v; edg[tot].val = val; edg[tot].net = hed[u]; hed[u] = tot++;}ll dijkstra(){ while (!pqn.empty()) { node now = pqn.top(); pqn.pop(); if (vis[now.x]) { return now.step; } for (int i = hed[now.x]; ~i; i = edg[i].net) { int next = edg[i].v; if (dis[next] > now.step + edg[i].val) { dis[next] = now.step + edg[i].val; pqn.push(node{next, dis[next]}); } } } return INF;}void init(){ memset(dis, 0x3f, sizeof(dis)); memset(vis, 0, sizeof(vis)); while (!pqn.empty()) { pqn.pop(); }}ll solve(int k){ ll ans = INF; for (int i = 0; i < MAGIC; i++) { init(); for (int j = 0; j < k; j++) { if (a[j] & (1 << i)) { pqn.push(node{a[j], 0}); dis[a[j]] = 0; } else { vis[a[j]] = 1; } } ans = min(ans, dijkstra()); init(); for (int j = 0; j < k; j++) { if (a[j] & (1 << i)) { vis[a[j]] = 1; } else { pqn.push(node{a[j], 0}); dis[a[j]] = 0; } } ans = min(ans, dijkstra()); } return ans;}int main(){ int T; scanf("%d", &T); for (int ce = 1; ce <= T; ce++) { tot = 0; memset(hed, -1, sizeof(hed)); scanf("%d%d", &n, &m); int u, v, w; while (m--) { scanf("%d%d%d", &u, &v, &w); addedge(u, v, w); } scanf("%d", &k); for (int i = 0; i < k; i++) { scanf("%d", &a[i]); } printf("Case #%d: %lld\n", ce, solve(k)); } return 0;}
阅读全文
0 0
- HDU-2017 多校训练赛9-1006-Senior Pan
- HDU 6166 && 2017 多校训练:Senior Pan(最短路)
- 【多校训练】hdu 6166 Senior Pan 最短路径 Dijkstra
- HDU 6166 Senior Pan (2017多校9
- HDU-2017 多校训练赛1-1006-Function
- HDU-2017 多校训练赛2-1006-Funny Function
- HDU-2017 多校训练赛9-1008-Numbers
- HDU-2017 多校训练赛9-1010-Two strings
- HDU-2017 多校训练赛9-补题
- HDU 6166 Senior Pan 2017多校第9场
- HDU 6166 Senior Pan
- HDU 6166 Senior Pan
- [HDU 6166] Senior Pan
- HDU 6166 Senior Pan
- hdu-6166 Senior Pan
- HDU 6166 Senior Pan
- Senior Pan HDU
- HDU 6166 Senior Pan
- Vue2 几种常见开局方式
- 简单总结AssetBundle的打包/解包
- 如何统计iOS产品不同渠道的下载量?
- 画图认识--matplotlib.pyplot
- C语言实现判断所输入字符串是否为回文
- HDU-2017 多校训练赛9-1006-Senior Pan
- python脚本实例
- 移动H5前端性能优化指南
- gxx_base(一) GxxObject
- sessionStorage使用方法
- leetcode[Longest Palindromic Substring]//待整理多种解法
- PAT (Basic Level) Practise (中文) 1003.我要通过!(20)
- JavaSE小结
- Linux中的进程讲解