超级源点/汇点(算法篇)

算法之超级源点/汇点

超级源点/汇点

概念

  • 超级源点/汇点是模拟出来的虚拟点,多用于图中:

    1. 同时有多个源点和多个汇点建立超级源点和超级汇点
    2. 同时有多个源点和一个汇点建立超级源点
    3. 同时有多个汇点和一个源点,建立超级汇点

    总结:源点和汇点哪个有多个,就开哪个的超级点

  • 介绍:我们平时所做的算法多是适用于一个源点到一个汇点或者是一个源点到多个汇点的类型,但是如果出现多个源点对应多个汇点时,我们会不知所措。跑多遍算法?那样会TLE,换个思维,既然是从多个源点出发到多个汇点,我们能不能建立一个点来代替多个源点/汇点 的效果,而又不影响答案。

做法

  • 当我们具有多个源点和一个汇点,我们要求源点到汇点的最短路径,则可以建立一个超级源点,连接所有源点,并且路径长度为0,然后只需要跑超级源点到汇点这(n+1)个点的最短距离即可

例题:

ACWing 1488.最短距离

分析

要求每次查询给出的村庄y到最近距离的商店的距离,对于每次查询,起点只有一个,汇点有多个,我们可以逆向思维,这样就变成商店作为源点,村庄y作为汇点,就变成了多个源点到单个汇点问题,这样我们创建一个超级源点,连接所有源点,并且路径长度为0,去跑dijkstra算法即可

#include <bits/stdc++.h>
using namespace std;
#define int long longstruct pii{int v,w;
};struct edge{int d,u;bool operator>(const edge& other) const{return d>other.d;}
};const int N=3e5+20;
const int INF=0x3f3f3f3f;
int n,m,k,q,a,b,c;
int dist[N];
bool vis[N];
vector<pii>g[N];void dijkstra(){memset(dist,INF,sizeof dist);dist[0]=0;priority_queue<edge,vector<edge>,greater<edge>>pq;pq.push({0,0});while(!pq.empty()){edge p=pq.top();pq.pop();int u=p.u,d=p.d;if(vis[u]) continue;vis[u]=1;for(auto x:g[u]){int v=x.v,w=x.w;if(dist[v]>dist[u]+w){dist[v]=dist[u]+w;pq.push({dist[v],v});}}}
}signed main(){ios::sync_with_stdio(false);cin.tie(0),cout.tie(0);cin>>n>>m;while(m--){cin>>a>>b>>c;g[a].push_back({b,c});g[b].push_back({a,c});}cin>>k;while(k--){cin>>a;g[0].push_back({a,0});}dijkstra();cin>>q;while(q--){cin>>a;cout<<dist[a]<<endl;}system("pause");return 0;
}

尾言

完整版笔记也就是数据结构与算法专栏完整版可到我的博客进行查看,或者在github库中自取(包含源代码)

  • 博客1: codebooks.xyz
  • 博客2:moonfordream.github.io
  • github项目地址:Data-Structure-and-Algorithms

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

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

相关文章

windows安装Docker Desktop及国内镜像

简介 Docker 是一个开源的应用容器引擎&#xff0c;它让开发者可以打包他们的应用以及依赖包到一个可移植的容器中&#xff0c;然后发布到任何流行的 Linux 机器上&#xff0c;也可以实现虚拟化。通过Docker工具&#xff0c;简化了应用的部署、配置和管理过程&#xff0c;提高…

2024年五款企业加密软件(企业加密软件排行最新)

关键是数字化时代&#xff0c;企业数据安全至关重要。一般来说信息技术快速发展&#xff0c;企业数据泄露风险上升。你知道的加密软件保护企业核心数据和商业机密&#xff0c;不可或缺。对我而言介绍几款企业加密软件&#xff0c;帮助选择适合需求的解决方案。 固信加密软件ht…

性价比高充电宝有哪些?充电宝十大最佳品牌大盘点!

在如今这个高度数字化的时代&#xff0c;我们的生活离不开各种电子设备&#xff0c;而充电宝作为保障电子设备续航的重要工具&#xff0c;其地位日益凸显。然而&#xff0c;面对市场上琳琅满目的充电宝品牌和产品&#xff0c;要挑选到一款性价比高的充电宝并非易事。在这篇盘点…

C++20中的指定初始化器(designated initializers)

指定初始化器(designated initializers, 指定初始值设定项)语法如下&#xff1a;C风格指定初始化器语法&#xff0c;初始化数据成员的一种便捷方式 T object { .des1 arg1, .des2 { arg2 } ... }; T object { .des1 arg1, .des2 { arg2 } ... }; 说明&#xff1a; 1.每个指…

2024做TEMU跨境电商,全托管/半托管模式怎么选?

如果说2023年&#xff0c;“全托管”是跨境圈的热词&#xff0c;那2024年一定少不了“半托管”。 自2024年1月&#xff0c;速卖通首次推出半托管模式后&#xff0c;引发了众跨境卖家的热议&#xff1b;而TEMU随后在3月也推出半托管模式&#xff0c;便迅速使得半托管这一模式开始…

盲人出行好帮手:蝙蝠避障让走路变简单

在一片无光的世界里&#xff0c;每一步都承载着探索与勇气。我是众多盲人中的一员&#xff0c;每天的出行不仅是从&#xff21;点到&#xff22;点的物理移动&#xff0c;更是一场心灵的征程。我的世界&#xff0c;虽然被剥夺了视觉的馈赠&#xff0c;却因科技的力量而变得宽广…

WEB DEVELOPMENT AND APPLICATIONSB DW4213

TASK 1. Pick a topic. o Decide on a product to sell. It can be any product that can be sold online. You may refer to websites such as Lazada or Shopee to get some inspiration. o Example: − Computer Store − Smartphone Store − Vitamins &am…

Visual Studio 2019 (VS2019) 中使用 CMake 配置 OpenCV 库(快捷版)

2024.07.11 测试有效 最近需要用一下 opencv 处理图像&#xff0c;简单配置了一下Cmake下的 opencv 库。 没有编译 opencv &#xff0c;也不知道他们为什么要自己编译 opencv 。 一、下载并安装 OpenCV 1.前往 OpenCV 官方网站 下载适用于您的系统的 OpenCV 安装包。 2.点击直接…

Java高级重点知识点-23-网络编程

文章目录 网络编程入门软件结构网络通信协议协议分类网络编程三要素 TCP通信程序通信步骤Socket类ServerSocket类简单的TCP网络程序 文件上传【拓展】 网络编程入门 软件结构 C/S结构 &#xff1a;全称为Client/Server结构&#xff0c;是指客户端和服务器结构。B/S结构 &…

AI Earth——2020年中国建筑物高度CNBH数据产品(10m)

数据介绍: 复旦大学生命科学学院GC3S团队(吴万本博士、赵斌教授等)利用多源地球观测数据和机器学习技术,构建了中国第一个10米分辨率的建筑高度估计模型(CNBH-10m)。基于此模型建立了中国10米分辨率的建筑高度数据集。此数据集基于全天候地球观测(雷达、光学和夜光图像)…

Iridient Developer:解锁Mac RAW图像处理的极致潜力,打造专业级色彩与细节

Iridient Developer for Mac是一款专为Mac用户设计的RAW图像调整软件&#xff0c;它以其卓越的性能和丰富的功能&#xff0c;赢得了众多摄影师的青睐。以下是对这款软件的详细介绍&#xff1a; 一、强大的RAW图像处理能力 Iridient Developer专为处理RAW图像而设计&#xff0…

使用Python实现深度学习模型:在嵌入式设备上的部署

引言 随着物联网&#xff08;IoT&#xff09;和嵌入式系统的发展&#xff0c;将深度学习模型部署到嵌入式设备上变得越来越重要。这不仅可以实现实时数据处理&#xff0c;还能大幅降低数据传输的延迟和成本。本文将介绍如何使用Python将深度学习模型部署到嵌入式设备上&#x…

Android WebView由于重定向造成的goBack()无效的问题解决

当加载重定向Url时&#xff0c;webView不能一级一级goback返回上一页面的问题 override fun shouldOverrideUrlLoading(webView: WebView, url: String): Boolean {//网页在webView中打开webView.loadUrl(url)return true}override fun onPageStarted(webView: WebView?, s: S…

Jtti:在SQL数据库中怎么实现数据的跨平台传输?

在SQL数据库中实现数据的跨平台传输可以通过以下几种常用的方法。这些方法适用于不同的数据库系统&#xff0c;并可以满足不同的需求和环境。 1. 使用数据库备份和恢复 MySQL 备份数据库&#xff1a; mysqldump -u [username] -p [database_name] > [backup_file].sql 恢复数…

Eel 入门:实现 Python 程序的 Web 前端界面

Eel 入门&#xff1a;实现 Python 程序的 Web 前端界面 Eel 是一个 Python 库&#xff0c;它允许 Python 程序通过简单的 API 与网页进行交互。它使用 WebSocket 协议来实现 Python 后端和 JavaScript 前端之间的实时通信。下面是关于 Eel 的用法、通信原理和使用场景的一篇博…

float、double

按照这个规定&#xff0c;单精度浮点数&#xff08;float&#xff09;这个数据类型所占内存大小为4个字节&#xff0c;也就是32位&#xff0c;所以单精度浮点数也叫32位浮点数&#xff0c;它在内存或硬盘中要占用32个比特。 单精度浮点数的尾数部分用23位存储&#xff0c;加上默…

链接库是什么

所谓链接库&#xff0c;从字面上理解&#xff0c;指的是程序在“链接”阶段使用的代码库。 “链接”是源程序转换成可执行程序必须经历的步骤之一&#xff0c;考虑到一些初学者对程序的运行过程还不了解&#xff0c;接下来先解释一下“链接”的含义&#xff0c;再系统地讲解链接…

09磁盘管理

一、磁盘管理 1.磁盘基础知识 &#xff08;1&#xff09;磁盘接口类型 个人电脑&#xff0c; 硬盘接口分为IDE类型和SATA类型 服务器版分为SCSI类型和SAS类型 &#xff08;2&#xff09;磁盘命名方式 windows中硬盘命名方式是c&#xff0c;d,e盘 linux中硬盘命名方式为 系统…

HTML+CSS+JS 实现3D风吹草动效果(B站视频)

效果&#xff1a; 代码&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><title>3D effect&…

开发指南043-自定义注解

现代Java编程大量使用注解&#xff0c;可以很方便的简化编程&#xff0c;提高编程效率。作为一个平台&#xff0c;也定义了自己的注解。过程如下&#xff1a; 第一步新建java文件&#xff0c;非常类似接口类&#xff1a; import java.lang.annotation.*; public interface …