题目链接:1488. 最短距离 - AcWing题库

输入样例:

7 7
1 2 5
1 4 3
2 3 2
2 5 1
3 6 7
5 6 8
6 7 6
3
7
5
4
7
1
2
3
4
5
6
7

输出样例:

3
1
3
0
0
6
0

题意:给一个有n个点和m条带权边的无向图,图中共有k个商店,问这些点去最近的商店的距离

思路:堆优化的迪杰斯特拉,用一个点连接所有商店,并且边权设为0,这样相当于每个商店都是起点,就可以算出从商店到各个点的最短距离。

代码1(邻接表):

#include<bits/stdc++.h>
#define pii pair<int, int>
using namespace std;
const int N = 1e5 + 5;
int n, m, k, d[N];
struct node{int to, w;
};
vector<node> v[N];void dij(){memset(d, 127, sizeof(d));d[n + 1] = 0;priority_queue<pii, vector<pii>, greater<pii> > q;q.push({0, n + 1});while(!q.empty()){pii p = q.top();q.pop();int sec = p.second;for(int i = 0; i < v[sec].size(); i++){node e = v[sec][i];if(d[e.to] > d[sec] + e.w){d[e.to] = d[sec] + e.w;q.push({d[e.to], e.to});}}
//        printf("***%d %d\n", d[sec], sec);}
}int main(){cin >> n >> m;for(int i = 1; i <= m; i++){int x, y, w;  cin >> x >> y >> w;v[x].push_back({y, w});v[y].push_back({x, w});}cin >> k;for(int i = 1; i <= k; i++){int x;  cin >> x;v[n + 1].push_back({x, 0});}dij();int q;  cin >> q;while(q--){int x;  cin >> x;printf("%d\n", d[x]);}
}

代码2(链式前向星):

好像会快一点

#include<bits/stdc++.h>
#define pii pair<int, int>
using namespace std;
const int N = 3e5 + 5;
int n, m, k, d[N], vis[N];
int h[N], ne[N], w[N], e[N], idx;
void add(int a, int b, int c){e[idx] = b, w[idx] = c, ne[idx] = h[a], h[a] = idx++;
}void dij(){memset(d, 127, sizeof(d));d[n + 1] = 0;priority_queue<pii, vector<pii>, greater<pii> > q;q.push({0, n + 1});while(!q.empty()){pii p = q.top();q.pop();int sec = p.second;if(vis[sec])  continue;vis[sec] = 1;for(int i = h[sec]; i != -1; i = ne[i]){int j = e[i];if(d[j] > d[sec] + w[i]){d[j] = d[sec] + w[i];q.push({d[j], j});}}}
}int main(){scanf("%d%d", &n, &m);memset(h, -1, sizeof(h));for(int i = 1; i <= m; i++){int x, y, w;  scanf("%d%d%d", &x, &y, &w);add(x, y, w);add(y, x, w);}cin >> k;for(int i = 1; i <= k; i++){int x;  scanf("%d", &x);add(n + 1, x, 0);}dij();int q;  scanf("%d", &q);while(q--){int x;  scanf("%d", &x);printf("%d\n", d[x]);}
}

AcWing1488. 最短距离相关推荐

  1. Warshall算法多源点之间最短路径的算法最短距离

    简介:Floyd算法又称为插点法,是一种利用动态规划的思想寻找给定的加权图中多源点之间最短路径的算法,与Dijkstra算法类似.该算法名称以创始人之一.1978年图灵奖获得者.斯坦福大学计算机科学系 ...

  2. LeetCode简单题之字符的最短距离

    题目 给你一个字符串 s 和一个字符 c ,且 c 是 s 中出现过的字符. 返回一个整数数组 answer ,其中 answer.length == s.length 且 answer[i] 是 s ...

  3. Maze Problem(求最短距离)BFS

    题目链接: http://openoj.awaysoft.com/JudgeOnline/problem.php?id=1107 不多说,求最短距离~BFS 1 #include<stdio.h ...

  4. 矩阵从左上到右下的最短距离问题

    1.问题:只允许向下或者向右,求从左上到右下的最短距离,动态规划法 1 6 3 1 1 1 6 0 2 5 1 1 3 2 0 3 4 1 1 5 3 0 2 3 6 7 4 7 5 2 2 6 1 ...

  5. 三维空间碰撞问题;空间中两直线的最短距离及最近点

    已知空间中两线段,如果它们无限变粗,判断是否相交.(主要讨论不在同一平面的情况) 线段AB 线段CD 问题的关键是求出这两条任意直线之间的最短距离,以及在这个距离上的两线最接近点坐标,判断该点是否在线 ...

  6. 逛街 最短距离+花费

    逛街 时间限制: 1 Sec 内存限制: 128 MB 题目描述 假设渣渣灰有一个女朋友,他的女朋友要他陪着一起去公园.由于渣渣灰不喜欢运动,所以他想找一条最短的路到达公园.由于途中会有许多消费点,而 ...

  7. C语言dijkstra最短距离的算法(附完整源码)

    C语言dijkstra最短距离的算法 C语言dijkstra最短距离的算法完整源码(定义,实现,main函数测试) C语言dijkstra最短距离的算法完整源码(定义,实现,main函数测试) #in ...

  8. Java黑皮书课后题第8章:*8.21(中心城市)给定一组城市,中心城市是和其它所有城市具有最短距离的城市。编写一个程序,提示用户输入城市数目以及位置(坐标),找到中心城市以及与其他城市总距离

    *8.21(中心城市)给定一组城市,中心城市是和其它所有城市具有最短距离的城市.编写一个程序,提示用户输入城市数目以及位置(坐标),找到中心城市以及与其他城市总距离 题目 题目描述与运行示例 破题 代 ...

  9. HDU4273(求三维凸包重心到表面的最短距离)

    题目:Rescue 题意:求三维凸包重心到表面的最短距离 #include<stdio.h> #include<algorithm> #include<string.h& ...

最新文章

  1. 【转载】究竟啥才是互联网架构“高可用”
  2. 知乎用户和龙鹏-言有三:计算机视觉应该怎样入门?
  3. 全球及中国皮肤晒黑喷雾行业销售模式及动态盈利分析报告2021年版
  4. 看奥运之四:“鸟巢”旁边的洋人求票者
  5. ProxyChains
  6. Jsoup获取动态js生成的内容
  7. BZOJ3211 花神游历各国
  8. 【文末福利】算法大赛评委共话技术趋势,这场直播值得一看!
  9. 想赚钱?先把底层逻辑搞清楚
  10. [WTL] 使用CImageList
  11. 教你怎么买美区苹果id
  12. 【Push Kit】模拟服务端发送消息至客户端,测试消息发送功能(华为推送服务)
  13. 基于STM32F103的ACS712电流传感器使用教程
  14. smartbi v7 Linux,配置Smartbi
  15. vnc下:无法执行默认的终端模拟器
  16. python +appium实现原理_Appium+python自动化(四十)-Appium自动化测试框架综合实践 - 代码实现(超详解)...
  17. java -- 解决InputStream不可重复读的问题
  18. 虚幻引擎中的节流与防抖
  19. 墙面有几种装修方法_外墙有几种装修方法
  20. 闲置服务器如何利用起来赚点零花钱

热门文章

  1. 计算机专业课好学吗,计算机专业课程有哪些 学计算机难不难
  2. 链霉亲和素-生物素,Biotin-Streptavidin
  3. 作为一个程序员,我们到底要学什么?
  4. css如何让过渡两边同时变宽,css-过渡
  5. wordpress 手动更新方法
  6. 小视频源码炙手可热的秘密,短视频行业先驱者们给我们留下启示...
  7. Advanced Installer打包msi文件操作流程
  8. iOS之Xcode断点调试
  9. OpenCV函数用法详解21~30,含代码示例,可直接运行
  10. ssm毕设项目Java防作弊的电子投票系统rgobs(java+VUE+Mybatis+Maven+Mysql+sprnig)