题目地址:

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(mlog⁡n)O(m\log n)O(mlogn),空间O(n)O(n)O(n)。

【ACWing】4246. 最短路径和相关推荐

  1. AcWing 4246. 最短路径和(反向建图+链式前向星+堆优化)

    题目连接 https://www.acwing.com/problem/content/description/4249/ http://poj.org/problem?id=1511 思路 其实这道 ...

  2. AcWing 844. 走迷宫(迷宫问题+最短路径+BFS+最短路径输出)

    题目描述: 给定一个 n×m 的二维整数数组,用来表示一个迷宫,数组中只包含 0 或 1,其中 0 表示可以走的路,1 表示不可通过的墙壁. 最初,有一个人位于左上角 (1,1) 处,已知该人每次可以 ...

  3. 算法提高课-图论-差分约束- AcWing 1169. 糖果:spfa求单源最短路、差分约束

    文章目录 题目分析 题目链接 题目分析 来源:acwing 分析: 差分约束系统 差分约束系统是一种特殊的N元一次不等式组.它包含N个变量X1,...,XnX_1,...,X_nX1​,...,Xn​ ...

  4. CSP认证201609-4 交通规划[C++题解]:最短路径树、dijkstra求单源最短路、递推思想

    题目分析 来源:acwing 分析: 这题是最短路树.保持原图中所有点到根结点的最短距离不变,然后在原图中选择一些边,使所有点连通的最短路是多长. 最短路径树,是一种使用最短路径算法生成的数据结构树. ...

  5. 《算法竞赛进阶指南》打卡-基本算法-AcWing 91. 最短Hamilton路径:位运算、状态压缩dp、dp

    文章目录 题目解答 题目链接 题目解答 分析: 状态压缩dp是用二进制数来表示状态. 数据范围n = 20, 那么状态总量就是2202^{20}220个状态. 可以按照以下思路去思考: 哪些点被用过 ...

  6. Acwing第 29 场周赛【完结】

    TLE场 目录 4194. Pow[签到] 4195. 线段覆盖[离散化+差分] 4196. 最短路径[最短路] 4194. Pow[签到] https://www.acwing.com/proble ...

  7. AcWing 91. 最短Hamilton路径(状态压缩DP+哈密顿回路)

    题目链接 https://www.acwing.com/problem/content/description/93/ 思路 这道题看似像一个最短路,但是并不是,因为我们要求对于每一个点都经过,但是最 ...

  8. AcWing 4243. 传递信息(单源最短路)

    题目连接 https://www.acwing.com/problem/content/description/4246/ http://poj.org/problem?id=1502 思路 没啥好说 ...

  9. 4246. 【五校联考6day2】san (Standard IO)

    4246. [五校联考6day2]san (Standard IO) Time Limits: 1000 ms  Memory Limits: 262144 KB  Detailed Limits D ...

最新文章

  1. java处理中文字符_Java中文字符处理的四大迷题
  2. linux卸载欧朋浏览器,如何在Centos下安装opera浏览器
  3. 程序员加班崩溃,过路外卖小哥主动帮忙改代码,网友直呼太暖了!
  4. N个数的全排列 -------指定排头法
  5. The most important part of the body
  6. 【转】Scott_ASP.NET MVC框架(第三部分) 把ViewData从控制器传到视图
  7. cmake的使用 cmake不是内部或外部命令
  8. 简明Python教程学习笔记_6_面向对象编程
  9. 判断图像局部过暗_CVPR 2020丨基于记忆增强的全局局部整合网络:更准确的视频物体检测方法...
  10. Shell sed命令,替换文件内容、替换目录下所有文件内容、读取文件内容
  11. js多种方法:返回上一页
  12. 2018年度计算机视觉GtiHub top开源项目!
  13. golang | 使用结构体抄的学生信息管理系统
  14. atitit.团队建设总结o6o fix
  15. 策略模式【设计模式学习-02】
  16. 如何将360浏览器兼容IE8、IE7
  17. 免费开源网站系统有哪些
  18. 网络广告计费的三种形式:CPC、CPM、CPA
  19. 帝国cms配置php,帝国cms如何安装
  20. 大多数人对职场“为人处世”存在困惑

热门文章

  1. 【Codesys】-按钮启动外部.exe应用程序,按钮关闭HMI界面,桌面图标启动HMI界面。
  2. Oracle 分页查询方法和效率分析
  3. 电脑屏幕亮度怎么调节?台式电脑找不到屏幕亮度怎么办
  4. Android音频播放
  5. 修复windows修复引导_如何使用安全模式修复Windows PC(以及何时应该修复)
  6. python爬取58同城租房信息
  7. GitHub上的AutoML
  8. Modulo Sum
  9. html5 邮编,美国9位详细邮编(United States ZIP Codes 5 Plus 4)的网站
  10. 分布式服务器中的数据安全问题及其解决办法