此题看题意还是挺难的,但我们可以想象一下最终获得的子图是个什么形状:一定是图中有任意一个节点,两个出发点先到这个点汇合,再去终点。

所以,我们通过dijkstra算法求三个点的单源最短路,其中终点的最短路需要存反的邻接表。然后枚举每个中转点即可。

注意:dijkstra有几个优化点,一个是用两层vector实现邻接表,用map会慢。还有就是用-1初始dis表会好一些,如果用大数还需要考虑溢出,而且初始化较慢。

typedef long long ll;
typedef pair<ll, int> P;
class Solution {public:vector<ll> dijkstra(int n, int src, vector<vector<P>>& adj){vector<ll> dis(n, -1);dis[src] = 0;priority_queue<P> q;q.push(P(0, src));while(q.size() > 0){P p = q.top(); q.pop();ll d = -p.first, min_node = p.second;if(d > dis[min_node])continue;auto adjs = adj[min_node];for(auto p: adjs){int end = p.first, pow = p.second;ll new_dis = dis[min_node] + pow;if(new_dis < dis[end] || dis[end] < 0){dis[end] = new_dis;q.push(P(-new_dis, end));}}}return dis;}long long minimumWeight(int n, vector<vector<int>>& edges, int src1, int src2, int dest) {// 构建邻接表和反向邻接表vector<vector<P>> adj(n, vector<P>{}), rev_adj(n, vector<P>{});for(auto v: edges){int start = v[0], end = v[1], pow = v[2];adj[start].push_back(P(end, pow));rev_adj[end].push_back(P(start, pow));}// 通过dijkstra算法得到三个点的单源最短路auto d1 = dijkstra(n, src1, adj);auto d2 = dijkstra(n, src2, adj);auto dd = dijkstra(n, dest, rev_adj);ll ans = -1;// 枚举图中每个节点做中转,记录最小值for(int i=0;i<n;i++){if(d1[i] < 0 || d2[i] < 0 || dd[i] < 0)continue;if(ans < 0)ans = LLONG_MAX;ans = min(ans, d1[i]+d2[i]+dd[i]);}return ans;}
};

leetcode 2203 单源最短路中转相关推荐

  1. acwing单源最短路的建图模式总结

    .根据边权的范围以及问题求解的需要,最短路问题可以分为以下 4 种情形,分别用不同的算法求解. • 单源最短路径(固定一个顶点为原点,求源点到其他每个顶点 的最短路径) • 1. 边权非负:Dijks ...

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

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

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

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

  4. 算法提高课-图论-单源最短路的综合应用-AcWing 1135. 新年好:dijkstra和dfs暴搜结合

    题目分析 来源:acwing 分析: 先预处理出从1,a,b,c,d,e出发到其他所有点的单源最短路.存在二维数组dist[6][N]中 dfs暴搜所有拜访顺序,共有5!种,对于每一种拜访顺序,可以通 ...

  5. 算法提高课-图论-单源最短路的建图方式-AcWing 920. 最优乘车:bfs求最短路、建图

    题目分析 来源:acwing 分析: 本题难在抽象建图上,这里采用的建图方式是:同一条公交线路上,前面的站点都可以连一条有向边到其后面的站点,且边权都为1. 由于边权都是1,可以用bfs来求最短路. ...

  6. PAT甲级1111 Online Map (30分):[C++题解]两次dijkstra求单源最短路、保存路径、长度最短、时间最短

    文章目录 题目分析 题目链接 题目分析 来源:acwing 分析:dijkstra求单源最短路的题目. 只是写两遍而已,第一遍求按照路径长度求,第二遍按照时间最少求. 另外加一个vector路径的判断 ...

  7. 单源最短路 Dijkstra算法 和 SPFA算法

    单源最短路 •从一个点出发,到达其他顶点的最短路径的长度. •基本操作:松弛 •d[u]+map[u, v]< d[v]这样的边(u,v)称为紧的(tense),可以对它进行松弛(relax): ...

  8. 系兄弟就来砍我 有向图单源最短路

    系兄弟就来砍我 时间限制: 1 Sec  内存限制: 128 MB 题目描述 渣渣灰因为一句"大家好,我系渣渣辉,系兄弟就来砍我"引得众粉丝纷纷拿两米长的大刀寻找. 现有n个据点, ...

  9. 模板:Prime最小生成树堆优化 + Dijkstra单源最短路堆优化

    Dijkstra 单源最短路堆优化 #include<bits/stdc++.h> using namespace std; typedef pair<int, int> PI ...

最新文章

  1. 墨卡托坐标转换成经纬度
  2. Solr环境搭建及IK分词的集成及solrJ的调用(一)
  3. 返回函数局部变量的指针和引用
  4. 江西理工大学期末试卷c语言,2016年江西理工大学信息工程学院计算机应用技术(加试)之C语言程序设计复试笔试最后押题五套卷...
  5. 被百度AI官方认证的大学,到底是什么水平
  6. python类及其方法
  7. 尚学堂java 参考答案 第八章
  8. 爬虫之scrapy环境安装
  9. matlab操作视频教程,matlab2019视频教程
  10. 英语学术论文简短语句摘抄
  11. lettcode算法题目--玛祖游戏
  12. win10远程连接ubuntu18.4
  13. 识别车牌是什么神经网络,车牌识别深度神经网络
  14. 微信重磅功能更新!加好友按人数收费,视频号付费订阅、微信版“知乎”来了...
  15. 使用RXTX实现简单串口通信调试工具
  16. pytorch开发工具
  17. 事实劳动关系怎么认定
  18. flink DataStream returns 设置返回类型
  19. 23.从0学ARM-网卡DM9000及uboot协议栈详解
  20. sort sort -r sort -n sort -nr的区别

热门文章

  1. 微商扫码发货管理系统开发
  2. 四、SolrCloud的安装
  3. 判断手机号码格式的方法
  4. World Development Indicators(世界发展指标相关数据集)
  5. win10系统桌面右键新建卡顿、反应慢问题
  6. 国瀚实业|五个必学的理财入门基本知识
  7. Fiori学习:WEBIDE本地个人版安装
  8. 语雀桌面端技术架构实践
  9. Pitest内存泄露分析 (工具使用IDEA、Jprofiler)
  10. Ardupilot代码学习笔记