算法学习系列(三十八):超级源点问题

目录

  • 引言
  • 一、题目描述
  • 二、解题思路
  • 三、示例代码

引言

关于最短路问题不论是竞赛、找工作、笔试面试、机试考的都是挺多的,所以还是非常的重要,最重要的就是模板首先背过,然后通过刷题见各种各样的题,具体难点就是如何建图、怎么转换问题,关于最短路问题的基础模板,可以参考我之前写过的博客最短路问题。


一、题目描述

题目描述:给一个村庄图,某些村庄中有商店,有多组询问,问某一个村庄到任意一个商店的最短距离是多少。

有 N 个村庄,编号 1 到 N 。村庄之间有 M 条无向道路,第 i 条道路连接村庄 a i 和村庄 b i ,长度是 c i 。 有 N 个村庄,编号 1 到 N。村庄之间有 M 条无向道路,第 i条道路连接村庄 a_i 和村庄 b_i,长度是 c_i。 N个村庄,编号1N。村庄之间有M条无向道路,第i条道路连接村庄ai和村庄bi,长度是ci

所有村庄都是连通的。 所有村庄都是连通的。 所有村庄都是连通的。

共有 K 个村庄有商店,第 j 个有商店的村庄编号是 x j 。 共有 K 个村庄有商店,第 j 个有商店的村庄编号是 x_j。 共有K个村庄有商店,第j个有商店的村庄编号是xj

然后给出 Q 个询问,第 k 个询问给出一个村庄的编号 y k ,问该村庄距离最近的商店有多远? 然后给出 Q 个询问,第 k 个询问给出一个村庄的编号 y_k,问该村庄距离最近的商店有多远? 然后给出Q个询问,第k个询问给出一个村庄的编号yk,问该村庄距离最近的商店有多远?

输入格式 输入格式 输入格式
第一行包含两个整数 N , M 。 第一行包含两个整数 N,M。 第一行包含两个整数N,M
接下来 M 行,每行包含三个整数 a i , b i , c i ,表示第 i 条道路连接村庄 a i 和村庄 b i ,长度是 c i 。 接下来 M 行,每行包含三个整数 ai,bi,ci,表示第 i 条道路连接村庄 ai 和村庄 bi,长度是 ci。 接下来M行,每行包含三个整数ai,bi,ci,表示第i条道路连接村庄ai和村庄bi,长度是ci
再一行包含整数 K 。 再一行包含整数 K。 再一行包含整数K
接下来 K 行,每行包含一个整数 x j ,表示第 j 个有商店的村庄编号是 x j 。 接下来 K 行,每行包含一个整数 xj,表示第 j 个有商店的村庄编号是 xj。 接下来K行,每行包含一个整数xj,表示第j个有商店的村庄编号是xj
再一行包含整数 Q 。 再一行包含整数 Q。 再一行包含整数Q
接下来 Q 行,每行包含一个整数 y k ,表示询问编号为 y k 的村庄与其距离最近的商店之间的距离。 接下来 Q 行,每行包含一个整数 y_k,表示询问编号为 y_k 的村庄与其距离最近的商店之间的距离。 接下来Q行,每行包含一个整数yk,表示询问编号为yk的村庄与其距离最近的商店之间的距离。

输出格式 输出格式 输出格式
对于每个询问,输出该询问的结果。 对于每个询问,输出该询问的结果。 对于每个询问,输出该询问的结果。

数据范围 数据范围 数据范围
2 ≤ N ≤ 1 0 5 , N − 1 ≤ M ≤ m i n ( N ( N − 1 ) 2 , 1 0 5 ) , 1 ≤ Q ≤ 1 0 5 , 1 ≤ K ≤ N , 1 ≤ c i ≤ 10000 2≤N≤10^5,N−1≤M≤min(\frac{N(N−1)}{2},10^5),1≤Q≤10^5,1≤K≤N,1≤c_i≤10000 2N105,N1Mmin(2N(N1),105),1Q105,1KN,1ci10000
输入样例: 输入样例: 输入样例:

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

二、解题思路

思路:该题是一个多源多汇点问题,我们可以通过增加一个超级源点与每个商店建立连接,权值为 0 0 0 ,这样村庄到商店的问题就转变为村庄到源点的问题了,即多源单汇点问题,然后我们可以将源点汇点翻转过来,就变成了求超级源点到各个村庄的最短路了,这就跟平常的最短路问题是一样的了, d i s t [ i ] dist[i] dist[i] 存的就是源点到 i i i 号点的距离。
注意:这里的超级源点到点的边必须是有向边,因为可能折回来找最近的商店而不是特定的商店。
在这里插入图片描述


三、示例代码

最短路问题参考博客:最短路问题

#include <bits/stdc++.h>using namespace std;typedef long long LL;const int N = 1e5+10, M = N * 3;int n, m, k, q;
int h[N], e[M], w[M], ne[M], idx;
int dist[N];
bool st[N];void add(int a, int b, int c)
{e[idx] = b, w[idx] = c, ne[idx] = h[a], h[a] = idx++;
}int spfa()
{memset(dist, 0x3f, sizeof dist);dist[0] = 0;queue<int> q;q.push(0);while(q.size()){auto t = q.front(); q.pop();st[t] = false;for(int i = h[t]; i != -1; i = ne[i]){int j = e[i];if(dist[j] > dist[t] + w[i]){dist[j] = dist[t] + w[i];if(!st[j]){st[j] = true;q.push(j);}}}}
}int main()
{ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);memset(h, -1, sizeof h);cin >> n >> m;while(m--){int a, b, c;cin >> a >> b >> c;add(a,b,c);add(b,a,c);}cin >> k;while(k--){int t; cin >> t;add(0,t,0);}spfa();cin >> q;while(q--){int t; cin >> t;cout << dist[t] << endl;}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/268706.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【牛客面试必刷TOP101】Day25.BM38 在二叉树中找到两个节点的最近公共祖先和BM40 重建二叉树

作者简介&#xff1a;大家好&#xff0c;我是未央&#xff1b; 博客首页&#xff1a;未央.303 系列专栏&#xff1a;牛客面试必刷TOP101 每日一句&#xff1a;人的一生&#xff0c;可以有所作为的时机只有一次&#xff0c;那就是现在&#xff01;&#xff01;&#xff01;&…

什么是智能合约

前言&#xff1a;在介绍智能合约的前提下&#xff0c;需要先介绍一下区块链 一.什么是区块链 区块链实质上是一个去中心化、分布式的可进行交易的数据库或账本&#xff0c;具有下列典型特征&#xff1a; 去中心化&#xff1a;简单来说&#xff0c;在网络上一个或多个服务器瘫…

IPC对象、消息队列 、共享内存

我要成为嵌入式高手之3月4日Linux高编第十四天&#xff01;&#xff01; 消息队列、共享内存、信号灯&#xff1a; 一、IPC对象 内存文件&#xff0c;如何查看&#xff1f; 1、ipcs&#xff1a; 查看系统中的IP对象的消息队列、共享内存、信号灯信息 2、ipcrm&#xff1a;…

蓝桥杯倒计时 41天 - 二分答案-最大通过数-妮妮的月饼工厂

最大通过数 思路&#xff1a;假设左边能通过 x 关&#xff0c;右边能通过 y 关&#xff0c;x∈[0,n]&#xff0c;通过二分&#xff0c;在前缀和中枚举右边通过的关卡数&#xff0c;保存 xy 的最大值。 #include<bits/stdc.h> using namespace std; typedef long long ll…

产品营销展示型wordpress外贸网站模板

工艺品wordpress外贸主题 简约大气的wordpress外贸主题&#xff0c;适合做工艺品进出品外贸的公司官网使用。 https://www.jianzhanpress.com/?p5377 餐饮设备wordpress外贸主题 简洁的wordpress外贸主题&#xff0c;适合食品机械、餐饮设备公司使用。 https://www.jianzh…

洛谷 B3620 x 进制转 10 进制

题目描述 给一个小整数 x 和一个 x 进制的数 S。将 S 转为 10 进制数。对于超过十进制的数码&#xff0c;用 A&#xff0c;B&#xff0c;…… 表示。 输入格式 第一行一个整数 x; 第二行一个字符串 S。 输出格式 输出仅包含一个整数&#xff0c;表示答案。 输入输出样例…

leetcode 移除链表元素

本题中&#xff0c;我们是要移除链表的某一个节点&#xff0c;为了确保统一操作&#xff0c;我们需要使用虚拟头节点&#xff0c;这样我们删除节点的时候&#xff0c;就是把这个要删除的节点&#xff08;当前节点cur&#xff09;的前一个节点pre&#xff0c;使得pre.next指向要…

sqlserver保存微信Emoji表情

首先将数据库字段&#xff0c;设置类型为 nvarchar(200)一个emoji表情&#xff0c;占4字节就可以了&#xff0c;web前端展示不用改任何东西&#xff0c;直接提交数据保存&#xff1b;回显也会没有问题&#xff0c;C#代码不用做任何处理&#xff1b; 不哭不闹要睡觉&#x1f31…

执行一条 select 语句,期间发生了什么?

大家好我是苏麟 , 今天开始又开一个坑 MySQL原理 . 资料来源 : 小林coding 小林官方网站 : 小林coding (xiaolincoding.com) 执行一条 select 语句&#xff0c;期间发生了什么&#xff1f; 学习 SQL 的时候&#xff0c;大家肯定第一个先学到的就是 select 查询语句了&#xff…

UCSF DOCK 分子对接详细案例(04)-基于RDKit描述符的分子从头设计DOCK_D3N

欢迎浏览我的CSND博客&#xff01; Blockbuater_drug …点击进入 文章目录 前言一、 软件及操作环境二、研究目的三、结构文件准备四、 DOCK/RDKit中 de novo design4.1 de novo design - refine_D3N4.2 对输出重新评分 总结参考资料 前言 本文是UCSF DOCK的使用案例分享&…

Windows服务器:通过nginx反向代理配置HTTPS、安装SSL证书

先看下效果&#xff1a; 原来的是 http&#xff0c;配置好后 https 也能用了&#xff0c;并且显示为安全链接。 首先需要 SSL证书 。 SSL 证书是跟域名绑定的&#xff0c;还有有效期。 windows 下双击可以查看相关信息。 下载的证书是分 Apache、IIS、Tomcat 和 Nginx 的。 我…

uniapp实现-审批流程效果

一、实现思路 需要要定义一个变量, 记录当前激活的步骤。通过数组的长度来循环数据&#xff0c;如果有就采用3元一次进行选择。 把循环里面的变量【name、status、time】, 全部替换为取出的那一项的值。然后继续下一次循环。 虚拟的数据都是请求来的, 组装为好渲染的格式。 二…

linux中对信号的认识

信号的概念与相关知识认识 信号是向目标进程发送消息通知的的一种机制。 信号可以以异步的方式发送给进程&#xff0c;也就是说&#xff0c;进程无需主动等待&#xff0c;而是在任何时间都可以接收到信号。 信号的种类 用kill-l命令查看系统定义的信号列表&#xff1a; 前台…

thinkphp学习11-数据库的查询表达式

比较查询 查询表达式支持大部分常用的 SQL 语句&#xff0c;语法格式如下 where(字段名,查询表达式,查询条件);在查询数据进行筛选时&#xff0c;我们采用 where()方法&#xff0c;比如 id79&#xff1b; $user1 Db::name(user)->where(id, 79)->find(); $user2 Db::…

巧用二进制实现俄罗斯方块小游戏

效果预览 思想 首先建立两个数组board、tetris用来存储当前已经堆积在棋盘的方块与正在下落的方块。 这两个是一维数组当需要在页面画棋盘时就对其每一项转成二进制&#xff08;看计算属性tetrisBoard&#xff09;&#xff0c;其中1&#xff08;红色&#xff09;0&#xff08;…

加密与安全_深入了解Hmac算法(消息认证码)

文章目录 PreHMAC概述常见的Hmac算法Code随机的key的生成 KeyGeneratorHmacMD5用Hmac算法取代原有的自定义的加盐算法 HmacMD5 VS MD5HmacSHA256 Pre 加密与安全_深入了解哈希算法中我们提到&#xff0c; 存储用户的哈希口令时&#xff0c;要加盐存储&#xff0c;目的就在于抵…

现货黄金价格今日行情怎样把握?

由于受到各种经济和政治因素的影响&#xff0c;国际市场上的黄金价格&#xff0c;每天的行情走势都在不断地波动&#xff0c;有时候行情上涨&#xff0c;有时候行情下跌&#xff0c;如果投资者不懂得灵活地应对&#xff0c;在哪一种行情中都有可能亏损&#xff0c;但如果投资者…

Linux系统CPU模式部署Qwen1.5-14B

Qwen1.5已适配Ollama。 Ollama 是一个命令行聊天机器人&#xff0c;它使得几乎可以在任何地方使用大型语言模型变得简单。 下载 Ollma 安装文件 访问以下网站&#xff1a;https://ollama.com/download/linux 执行&#xff1a;curl -fsSL https://ollama.com/install.sh | sh…

信息安全是什么

信息安全&#xff0c;也称为信息安全或数据安全&#xff0c;是防止未经授权的访问、更改、中断和破坏信息。 信息安全本身包括的范围很大&#xff0c;大到国家军事政治等机密安全&#xff0c;小范围的当然还包括如防范商业企业机密泄露&#xff0c;防范青少年对不良信息的浏览…

解决虚拟机启动报错:“End kernel panic - not syncing: attempted to kill the idle task”

原本能正常运行的虚拟机&#xff0c;很长一段时间没用后&#xff0c;今天再次启动&#xff0c;然后就出现下面的问题&#xff1a; 然后走了一些弯路&#xff0c;比如说删除该虚拟机然后新建一个虚拟机&#xff08;问题未解决&#xff09;、直接删除VitualBox重新安装&#xff0…