Distance opentrain
来源:互联网 发布:丁丁软件 编辑:程序博客网 时间:2024/06/05 07:19
给定一个无向图以及其中的n个关键点,求其中最短的两个关键点的路径。
Dij,多源最短路。每个节点都记录最短路的起始点,如果两个不相同的起始点相连,那么这就是最短路。
注意用spfa会超时
#include <bits/stdc++.h>#include <vector>using namespace std;const int maxx = 1e9;const int maxn = 100010;const int mo = 50*maxn;struct Node { int s, t; Node() {t = maxx; s = 0;} Node(int ss, int tt): s(ss), t(tt) {} bool operator<(const Node &other) const { return t < other.t; }};Node dist[maxn];int d[mo], x, y, z, n, m, k, ans, l, r;bool flag[maxn], p[maxn];long long final;struct Edge { int u, v, t; Edge() {} Edge(int uu, int vv, int tt): u(uu), v(vv), t(tt) {} bool operator<(const Edge &other) const { return t > other.t; }};vector<Edge> G[maxn];priority_queue<Edge> q;void dij() { int u, v; for (int i = 1; i <= r; i++) for (int j = 0; j < G[d[i]].size(); j++) { q.push(G[d[i]][j]); } Edge e = q.top(); q.pop(); while (l < r) { l++; while (!q.empty() && dist[e.v].s != 0) { if (dist[e.v].s != dist[e.u].s) { ans = dist[e.u].t+dist[e.v].t+e.t; break; } e = q.top(); q.pop(); } if (q.empty() || ans != maxx) break; u = e.u; v = e.v; dist[v].s = dist[u].s; dist[v].t = dist[u].t+e.t; d[++r] = v; for (int i = 0; i < G[v].size(); i++) q.push(G[v][i]); }}int main() { //freopen("input.txt","r",stdin); scanf("%d %d %d", &n, &k, &m); r = 0; ans = maxx; for (int i = 1; i <= n; i++) { scanf("%d", &x); if (!flag[x]) { flag[x] = true; d[++r] = x; dist[x] = Node(x, 0); } else ans = 0; } if (ans == 0) { printf("0\n"); return 0; } for (int i = 1; i <= m; i++) { scanf("%d %d %d", &x, &y, &z); G[x].push_back(Edge(x, y, z)); G[y].push_back(Edge(y, x, z)); } dij(); final = ans; final = final*3; printf("%lld\n", final);}
阅读全文
0 0
- Distance opentrain
- Distance
- distance
- distance
- Distance
- Edit Distance (Levenshtein Distance)
- Levenshtein distance(Edit distance)
- Distance mapping
- Levenshtein Distance
- Hamming Distance
- Levenshtein Distance
- edit distance
- distance transform
- Diffussion Distance
- Distance metric
- Levenshtein distance
- distance函数
- Edit Distance
- React Native入门与实战
- 使用leakCanary
- idea tomcat 启动项目报内存溢出 解决方法
- C++面试题一
- 【代码笔记】iOS-将地址解析成经纬度
- Distance opentrain
- springboot redis多数据源设置
- Java虚拟机体系结构深入研究总结
- centos7 mysql数据库安装和配置
- 如何长时间高效学习
- Python第三方库——urlparser
- matlab 出现Undefined function 'functionname' for input arguments of type 'logical'问题的解决办法
- 兼容IE9以下的input实时监听例子
- HashSet,LinkedHashset,TreeSet的比较