题目分析



来源:acwing

分析:

  1. 先预处理出从1,a,b,c,d,e出发到其他所有点的单源最短路。存在二维数组dist[6][N]中
  2. dfs暴搜所有拜访顺序,共有5!种,对于每一种拜访顺序,可以通过查表的方式算出最短距离。比如拜访顺序是:1,3,2,4,5,6,我们已经预处理好1到3的最短距离,3到2的最短距离,2到4的最短距离等等,总的距离就是加起来。 dfs就是枚举所有的拜访顺序,求其中最短的距离。

ac代码

#include<bits/stdc++.h>
#define x first
#define y second
using namespace std;
const int N = 50010, M = 2e5 +10;
const int INF =  0x3f3f3f3f;
typedef pair<int ,int > PII;int n, m;
int source[6];
bool st[N];int dist[6][N];
int h[N],e[M],ne[M],w[M],idx;void add(int a, int b, int c){e[idx] = b, w[idx] = c, ne[idx] = h[a], h[a] = idx ++;
}void dijkstra(int start, int dist[]){memset(dist, 0x3f,  4*N); // int 4个字节,所以大小是4*Nmemset(st,0, sizeof st);dist[start] = 0;priority_queue<PII,vector<PII>, greater<PII>> heap;heap.push({0,start}); // 距离,点while(heap.size()){auto t = heap.top();heap.pop();int ver = t.y, distance = t.x;if(st[ver]) continue;st[ver] = true;for(int i = h[ver]; ~i; i = ne[i]){int j = e[i];if(dist[j] > distance + w[i]){dist[j] = distance + w[i];heap.push({dist[j], j});}}}
}// 枚举每种拜访次序,求出最小距离
// 拜访了u个人,自己是第1个人;当前起点是source[start],当前走过的距离是distance
int dfs(int u, int start, int distance){// u== 6表示:拜访完5个亲戚,此时返回最短路if( u == 6) return distance;// res存距离最短的分支int res = INF;for(int i = 1; i<=5; i ++)if(!st[i]){int next = source[i]; // 走亲戚ist[i] = true;res = min(res, dfs(u +1, i, dist[start][next] + distance));st[i] = false;}return res;
}int main(){cin >> n >> m;memset(h, -1, sizeof h);source[0] = 1; for(int i = 1; i <= 5; i ++) cin >> source[i];  while(m --){int x, y, t;cin >> x >> y >> t;add(x, y, t), add(y, x, t);}// 6 个点,分别求最短路for(int i =0; i < 6; i ++) dijkstra(source[i],dist[i]);/*1. 共有6个人,起点是自己:第1个人2. 当前是source[0]:佳佳3. 当前走过的距离是0*/memset(st,0, sizeof st);printf("%d\n", dfs(1, 0, 0));}

题目来源

https://www.acwing.com/problem/content/1137/

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

  1. 算法提高课-图论-单源最短路的综合应用-AcWing 342. 道路与航线:最短路dijkstra、拓扑排序 、综合题、好题

    题目分析 来源:acwing 分析: 道路:双向,边权非负, 航线:单向,边权可正可负,且无环. 根据题意,点可以分为很多团(连通块),团内部只有道路(道路是双向的,而且是连通的,所以不能存在航线,否 ...

  2. 算法提高课-图论-单源最短路的扩展应用-AcWing 1137. 选择最佳线路:多源最短路、虚拟源点

    题目分析 来源:acwing 分析: 本题有多组测试数据,如果对每个源点暴力使用dijkstra,会超时. 好的做法:建立虚拟源点S,让S到所有真实起点的边权为0,这样原问题就可以转换为从虚拟源点S到 ...

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

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

  4. 算法提高课-图论-单源最短路的建图方式-AcWing 1127. 香甜的黄油:spfa最短路

    题目分析 来源:acwing 分析: 多源汇最短路.所以我们首先想到的是floyd算法, 可是它的复杂度是O(n3)O(n^3)O(n3),会超时.所以我们需要另外考虑. 任意一个点作为起点求出到所有 ...

  5. 算法提高课-图论-单源最短路的建图方式-AcWing 903. 昂贵的聘礼:建图巧妙、dijkstra、考虑等级

    题目分析 来源:acwing 由于终点是1号节点,建立虚拟节点S,如下建图(根据样例画图).S出发和每个点直连的边权代表直接买该物品花的金币数:而由S到1的任意一条通路,边权之和就是花费的金币数.所以 ...

  6. 算法提高课-图论-单源最短路的建图方式-AcWing 1128. 信使:dijkstra、 最短路取最大值

    题目分析 来源:acwing 分析:广播模型,求整个网络所有点都被广播到,需要多少时间. 本题核心:对于每个点来说,它接收到信的时间,是等于它到指挥部的最短距离. 所以,所有点被广播到,就是求指挥部到 ...

  7. 算法提高课-图论-单源最短路的建图方式-AcWing 1126. 最小花费:dijkstra求最长路

    题目分析 来源:acwing 分析: 链条转移:start * (1-w1) * (1- w2) * (1- w3) -(1-wn) = 100,要start最小,则w =(1-w1) * (1- w ...

  8. 算法提高课-图论-单源最短路的建图方式-AcWing 1129. 热浪:dijkstra裸题

    题目分析 来源:acwing 分析: ac代码 朴素的dijkstra() ,时间复杂度O(n2)O(n^2)O(n2) #include<bits/stdc++.h> using nam ...

  9. [AcWing算法提高课]之图论 单源最短路的综合应用(C++题解)

    目录 1)热浪(板子题) (朴素dijkstra) O(n2) (堆优化dijkstra) O((n+m)logm) (spfa) O(m) 2)信使 3)香甜的黄油 4)最小花费 5) 最优乘车 6 ...

最新文章

  1. php 长文本_php字符串太长怎么办
  2. Unicode字段也有collation
  3. python地理数据处理 下载_python-doc/将Python用于地理空间数据处理.md at master · zhuxinyizhizun/python-doc · GitHub...
  4. 美征信巨头Equifax因Struts漏洞导致数据大规模泄露
  5. 薄壁轴承摩擦力矩_机器人四点接触薄壁轴承详细介绍
  6. win7 第一次装 mysql-5.7-winx64 系列,不知道root 密码,该如何处理?
  7. LeetCode 19删除链表的倒数第N个节点-中等
  8. CF1556E-Equilibrium【栈,树状数组】
  9. Log4j快速使用精简版
  10. 【转】Visual Studio 2005 上 AJAX(AjaxControlToolkit) 的安装
  11. vnpy怎么创建策略并回测_基于vnpy、rqdata的回测打通历程
  12. html5教程_最好HTML和HTML5教程
  13. 完美国际服务器维护中,《完美国际2》3月31日全服更新维护公告
  14. nagiosxi 监控Linux系统
  15. 2021年系统集成项目管理工程师证书领取
  16. java 知网 语义 相似度,基于知网语义相似度的中文文本分类研究 论文笔记
  17. 10个深度学习的工具
  18. 排污单位门禁、视频、参数监控联网数据采集传输仪
  19. 流量卡之家:智慧矿山开启5G时代 联通助推能源产业发展新纪元
  20. os.path.abspath和os.path.realpath区别

热门文章

  1. MySQL xtrabackup之--databases 勿手贱
  2. windows下用QTwebkit解析html
  3. asp.net中的参数传递:Context.Handler 的用法
  4. CV-机器视觉、图像处理方面的书籍
  5. mysql主备在同一台_MySQL高可用(一)主备同步:MySQL是如何保证主备一致的
  6. python了解一下_想要精通python?19个语法了解一下!
  7. ST CUBEMX 修改MCU型号
  8. LINUX驱动注册过程失败处理不当引起的恶果
  9. 华为的鸿蒙系统营销,全球第一款搭载华为鸿蒙系统的荣耀智慧屏终端在万众期待中正式上线销售...
  10. 基于matlab的pointnet++深度学习网络点云数据分类