【ACWing】4246. 最短路径和
题目地址:
https://www.acwing.com/problem/content/4249/
给定一个nnn个点mmm条边的无重边无自环的有向图。点的编号1∼n1∼n1∼n。任意两点之间均可相互抵达。请你计算,从点111到其他所有点的最短路径长度以及从其他所有点到点111的最短路径长度,并将这2×(n−1)2×(n−1)2×(n−1)个最短路径长度相加后输出结果。
输入格式:
第一行包含整数TTT,表示共有TTT组测试数据。每组数据第一行包含两个整数n,mn,mn,m。接下来mmm行,每行包含三个正整数a,b,ca,b,ca,b,c,表示从点aaa到点bbb存在一条边,长度为ccc。
输出格式:
每组数据输出一行,一个整数表示结果。
数据范围:
1≤T≤101≤T≤101≤T≤10
1≤n,m≤1061≤n,m≤10^61≤n,m≤106
1≤a,b≤n1≤a,b≤n1≤a,b≤n
一组数据中所有的ccc相加之和不超过10910^9109。
边权都非负。
可以正向图反向图来两遍Dijkstra算法。代码如下:
#include <iostream>
#include <cstring>
#include <queue>
using namespace std;
using PII = pair<int, int>;const int N = 1e6 + 10, M = 2 * N;
int n, m;
int h[N], rh[N], e[M], ne[M], w[M], idx;
int dist[N];
bool vis[N];void add(int h[], int a, int b, int c) {e[idx] = b, ne[idx] = h[a], w[idx] = c, h[a] = idx++;
}long dijkstra(int h[]) {memset(dist, 0x3f, sizeof dist);memset(vis, 0, sizeof vis);long res = 0;priority_queue<PII, vector<PII>, greater<>> heap;dist[1] = 0;heap.push({0, 1});while (heap.size()) {auto t = heap.top(); heap.pop();int v = t.second;if (vis[v]) continue;vis[v] = true;res += dist[v];for (int i = h[v]; ~i; i = ne[i]) {int j = e[i];if (!vis[j] && dist[j] > dist[v] + w[i]) {dist[j] = dist[v] + w[i];heap.push({dist[j], j});}}}return res;
}int main() {int T;scanf("%d", &T);while (T--) {memset(h, -1, sizeof h);memset(rh, -1, sizeof rh);idx = 0;scanf("%d%d", &n, &m);while (m--) {int a, b, c;scanf("%d%d%d", &a, &b, &c);add(h, a, b, c), add(rh, b, a, c);}printf("%ld\n", dijkstra(h) + dijkstra(rh));}return 0;
}
时间复杂度O(mlogn)O(m\log n)O(mlogn),空间O(n)O(n)O(n)。
【ACWing】4246. 最短路径和相关推荐
- AcWing 4246. 最短路径和(反向建图+链式前向星+堆优化)
题目连接 https://www.acwing.com/problem/content/description/4249/ http://poj.org/problem?id=1511 思路 其实这道 ...
- AcWing 844. 走迷宫(迷宫问题+最短路径+BFS+最短路径输出)
题目描述: 给定一个 n×m 的二维整数数组,用来表示一个迷宫,数组中只包含 0 或 1,其中 0 表示可以走的路,1 表示不可通过的墙壁. 最初,有一个人位于左上角 (1,1) 处,已知该人每次可以 ...
- 算法提高课-图论-差分约束- AcWing 1169. 糖果:spfa求单源最短路、差分约束
文章目录 题目分析 题目链接 题目分析 来源:acwing 分析: 差分约束系统 差分约束系统是一种特殊的N元一次不等式组.它包含N个变量X1,...,XnX_1,...,X_nX1,...,Xn ...
- CSP认证201609-4 交通规划[C++题解]:最短路径树、dijkstra求单源最短路、递推思想
题目分析 来源:acwing 分析: 这题是最短路树.保持原图中所有点到根结点的最短距离不变,然后在原图中选择一些边,使所有点连通的最短路是多长. 最短路径树,是一种使用最短路径算法生成的数据结构树. ...
- 《算法竞赛进阶指南》打卡-基本算法-AcWing 91. 最短Hamilton路径:位运算、状态压缩dp、dp
文章目录 题目解答 题目链接 题目解答 分析: 状态压缩dp是用二进制数来表示状态. 数据范围n = 20, 那么状态总量就是2202^{20}220个状态. 可以按照以下思路去思考: 哪些点被用过 ...
- Acwing第 29 场周赛【完结】
TLE场 目录 4194. Pow[签到] 4195. 线段覆盖[离散化+差分] 4196. 最短路径[最短路] 4194. Pow[签到] https://www.acwing.com/proble ...
- AcWing 91. 最短Hamilton路径(状态压缩DP+哈密顿回路)
题目链接 https://www.acwing.com/problem/content/description/93/ 思路 这道题看似像一个最短路,但是并不是,因为我们要求对于每一个点都经过,但是最 ...
- AcWing 4243. 传递信息(单源最短路)
题目连接 https://www.acwing.com/problem/content/description/4246/ http://poj.org/problem?id=1502 思路 没啥好说 ...
- 4246. 【五校联考6day2】san (Standard IO)
4246. [五校联考6day2]san (Standard IO) Time Limits: 1000 ms Memory Limits: 262144 KB Detailed Limits D ...
最新文章
- java处理中文字符_Java中文字符处理的四大迷题
- linux卸载欧朋浏览器,如何在Centos下安装opera浏览器
- 程序员加班崩溃,过路外卖小哥主动帮忙改代码,网友直呼太暖了!
- N个数的全排列 -------指定排头法
- The most important part of the body
- 【转】Scott_ASP.NET MVC框架(第三部分) 把ViewData从控制器传到视图
- cmake的使用 cmake不是内部或外部命令
- 简明Python教程学习笔记_6_面向对象编程
- 判断图像局部过暗_CVPR 2020丨基于记忆增强的全局局部整合网络:更准确的视频物体检测方法...
- Shell sed命令,替换文件内容、替换目录下所有文件内容、读取文件内容
- js多种方法:返回上一页
- 2018年度计算机视觉GtiHub top开源项目!
- golang | 使用结构体抄的学生信息管理系统
- atitit.团队建设总结o6o fix
- 策略模式【设计模式学习-02】
- 如何将360浏览器兼容IE8、IE7
- 免费开源网站系统有哪些
- 网络广告计费的三种形式:CPC、CPM、CPA
- 帝国cms配置php,帝国cms如何安装
- 大多数人对职场“为人处世”存在困惑