《洛谷深入浅出基础篇》P1536 村村通——并查集

上链接:P1536 村村通 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)icon-default.png?t=N7T8https://www.luogu.com.cn/problem/P1536

上题干:

题目描述

某市调查城镇交通状况,得到现有城镇道路统计表。表中列出了每条道路直接连通的城镇。市政府 "村村通工程" 的目标是使全市任何两个城镇间都可以实现交通(但不一定有直接的道路相连,只要相互之间可达即可)。请你计算出最少还需要建设多少条道路?

输入格式

输入包含若干组测试数据,每组测试数据的第一行给出两个用空格隔开的正整数,分别是城镇数目 n 和道路数目 m ;随后的 m 行对应 m 条道路,每行给出一对用空格隔开的正整数,分别是该条道路直接相连的两个城镇的编号。简单起见,城镇从 11 到 n 编号。

注意:两个城市间可以有多条道路相通。

在输入数据的最后,为一行一个整数 0,代表测试数据的结尾。

输出格式

对于每组数据,对应一行一个整数。表示最少还需要建设的道路数目。

输入输出样例

输入 #1复制

4 2
1 3
4 3
3 3
1 2
1 3
2 3
5 2
1 2
3 5
999 0
0

输出 #1复制

1
0
2
998

说明/提示

数据规模与约定

对于 100%100% 的数据,保证1≤n<1000 。

 这道题属于并查集的很好的练习题。

考察的内容有以下几点:

1,并查集模板(初始化父节点,查询祖先,连结两个集合)

2,理解题意

3,计算此时总共有几个集合。

这道题,无非就是上一道题洛谷P1551亲戚的换壳版。

详情可以看看我的这篇文章:

《洛谷深入浅出基础篇》P1551亲戚——集合——并查集P1551亲戚-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/louisdlee/article/details/134427867?spm=1001.2014.3001.5502每两个城市之间连接一条道路,假设这两个城市为x,y。

连接x的城市一定和y是连通关系(毕竟可以通过x到达y)

连接y的城市一定和x是连通关系

现在让我们求还要修建多少条路使得所有城市被连通,

也就是算,我们当前一共有多少个不同的集合,每个集合之间只需要一条路就能连通。(一个孤立的城市也算一个集合)

即如果有三个集合,那么需要2条路就可以使之全部打通。

如果有n个集合,那么需要n-1条路就可以使之全部打通。

所以我们只需要求出集合的个数,然后输出集合-1就行了。

上代码:

const int N = 1e3+10;
int fa[N], flag[N];
int n, m;
int find1(int x)
{
	if (fa[x] == x)return fa[x];
	else return fa[x] = find1(fa[x]);
}
void join1(int c1, int c2)
{
	int f1 = find1(c1), f2 = find1(c2);
	if (f1 != f2) fa[f1] = f2;
}
int main()
{
	while (cin >> n >> m)
	{
		memset(fa, 0, sizeof(fa));
		memset(flag, 0, sizeof(flag));
		for (int i = 1; i <= n; i++)
			fa[i] = i;
		for (int i = 1; i <= m; i++){
			int x, y;
			cin >> x >> y;
			join1(x, y);
		}
		int ans = 0;
		for(int i=1;i<=n;i++)
			for (int j = i; j <= n; j++)
				if (find1(i) ==find1(j))flag[find1(i)] = 1;
			
		for (int i = 1; i <= n; i++)
			if (flag[i])ans++;
		
		cout << ans-1 << endl;
	}
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

全民运动时代,气膜建筑备受瞩目

气膜体育场馆&#xff0c;作为当今新型的临时建筑运动场馆&#xff0c;在满足大型体育赛事需求方面展现出显著的优势。相较于传统体育场馆&#xff0c;气膜建筑不仅拥有更宽敞的空间&#xff0c;而且造价成本更为经济&#xff0c;成为体育场馆领域备受关注的建筑形式。 气膜建筑…

郑州市管城区工信局局长任华民一行莅临中创算力调研指导工作

2023年11月15日&#xff0c;为深入了解企业生产经营情况&#xff0c;解决发展诉求。郑州市管城区工信局局长任华民等领导一行莅临中创算力&#xff0c;中创副总经理杨光、技术总监刘朝阳、行政主管生田等人员陪同调研。 调研期间&#xff0c;双方就生产经营、“算力数据中心”…

基于SSM的校园二手物品交易市场设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录…

界面组件DevExpress Reporting v23.1亮点 - 全新升级报表查看器

DevExpress Reporting是.NET Framework下功能完善的报表平台&#xff0c;它附带了易于使用的Visual Studio报表设计器和丰富的报表控件集&#xff0c;包括数据透视表、图表&#xff0c;因此您可以构建无与伦比、信息清晰的报表 界面组件DevExpress Reporting v23.1已经发布一段…

如何快速找到华为手机中下载的文档

手机的目录设置比较繁杂&#xff0c;尤其是查找刚刚下载的文件&#xff0c;有时候需要捣鼓半天&#xff0c;如何快速找到这些文件呢&#xff1f;以下提供了几种方法&#xff1a; 方法一&#xff1a; 文件管理-》搜索文档 方法二&#xff1a; 文件管理-》最近 方法三&#xf…

BMS系统项目

1、通过电压监测是否冲满&#xff0c;通过电压可以监测是否放完电 电池得参数 单体过压&#xff08;充满电&#xff09; 过压恢复&#xff08;百分之90多&#xff09; 欠压保护&#xff08;百分之几得电&#xff0c;快关机了&#xff09; 欠压恢复&#xff08;就是欠压之上…

阿里云轻量应用服务器特价87元和165元1年测评,看看是否值得购买

2023年11月&#xff0c;阿里云推出了两款特价轻量应用服务器&#xff0c;2核2G4M特惠价格只要87元1年&#xff0c;2核4G5M特惠价格只要165元1年&#xff0c;那么这两款轻量应用服务器到底怎么样呢&#xff1f;可以用来做什么&#xff1f;是否值得购买呢&#xff1f;下面我们一起…

(四)什么是Vite——冷启动时vite做了什么(源码、middlewares)

vite分享ppt&#xff0c;感兴趣的可以下载&#xff1a; ​​​​​​​Vite分享、原理介绍ppt 什么是vite系列目录&#xff1a; &#xff08;一&#xff09;什么是Vite——vite介绍与使用-CSDN博客 &#xff08;二&#xff09;什么是Vite——Vite 和 Webpack 区别&#xff0…

python递归求数字各个位数相加_和

python递归求数字的各项和&#xff0c;例如数字一千零二十四&#xff1a;“1024”&#xff0c;输出结果为“10247” 第一种方法&#xff1a; def sum(a): #求一个数字各项和&#xff0c;第一种递归方法if 0<a<9: #从前到最后一个&#xff0c;出循环…

swiper垂直方向全屏实现鼠标滚轮滚动一下切换一屏

效果 20231116092014 添加mousewheelControl: true,这个属性即可 <div class"swiper-container"><div class"swiper-wrapper"><div class"swiper-slide" > <div class"" style"height: 100%; background-…

一个前端非侵入式骨架屏自动生成方案

目录 背景 现有方案调研 侵入业务式手写代码 非侵入业务式手写代码 非侵入式骨架屏代码自动生成 技术方案 设计原则 架构图 骨架屏生成 骨架屏注入 优化点 部分技术细节解析 puppeteer 文本块处理 图片块处理 a 标签处理 自定义属性处理 首屏HTML处理 首屏样…

合肥数字孪生赋能工业制造,加速推进制造业数字化转型

聚焦国家战略需求和先进制造业发展方向&#xff0c;加快数字化发展战略部署&#xff0c;数字孪生、工业互联网、工业物联网已被广泛认为是工业革命的新引擎。合肥数字孪生正在推动工业制造从制造转向智造。通过数字化建模和仿真的方式&#xff0c;优化设计、生产、质量管理、供…

使用 Gradle 命令了解项目构建信息

引言 首先&#xff0c;Gradle 作为使用 Android Studio 开发 Android 项目的默认构建工具&#xff0c;它里面的任何东西都基于两个概念&#xff1a; projects ( 项目 )tasks ( 任务 ) 每一个构建由一个或多个 projects 构成&#xff0c;每一个 project 由一个或多个 tasks 构…

SOLIDWORKS功能布局实用技巧之保存实体技术

在SOLIDWORKS软件中&#xff0c;有一些命令可以将一个或多个实体保存为独立的零件文件。然而&#xff0c;每个命令都具有不同的特性&#xff0c;有些命令的选项可以让您在保存多个零件时直接生成装配体文件。让我们来深入了解这些功能布局技巧&#xff0c;特别是实体保存技术。…

XXX系统测试报告测试用例模板

XXX系统测试报告 编制&#xff1a; 2023-5-16 审核&#xff1a; 日期&#xff1a; 批准&#xff1a; 日期&#xff1a; 版本 修订时间 修订人 修订类型 修订章节 修订内容 *修订类型分为 A …

如何解决3d max渲染效果图全白这类异常问题?

通过3d max渲染效果图时&#xff0c;经常会出现3Dmax渲染效果图全黑或是3Dmax渲染效果图全白这类异常问题。可能遇到这类问题较多的都是新手朋友。不知如何解决。 3dmax渲染出现异常的问题&#xff0c;该如何高效解决呢&#xff1f;今天小编这里整理几项知识点&#xff0c;大家…

力扣刷题篇之数与位1

系列文章目录 目录 系列文章目录 前言 一、进制转换 总结 前言 本系列是个人力扣刷题汇总&#xff0c;本文是数与位。刷题顺序按照[力扣刷题攻略] Re&#xff1a;从零开始的力扣刷题生活 - 力扣&#xff08;LeetCode&#xff09; 一、进制转换 67. 二进制求和 - 力扣&…

二十、泛型(8)

本章概要 潜在的类型机制 pyhton 中的潜在类型C 中的潜在类型Go 中的潜在类型java 中的直接潜在类型 潜在类型机制 在本章的开头介绍过这样的思想&#xff0c;即要编写能够尽可能广泛地应用的代码。为了实现这一点&#xff0c;我们需要各种途径来放松对我们的代码将要作用的…

Leetcode周赛371补题(3 / 3)

目录 1、找出强数对的最大异或值 - 暴力 2、高访问员工 - 哈希表 模拟 3、最大化数组末位元素的最少操作次数 - 思维 贪心 1、找出强数对的最大异或值 - 暴力 找出强数对的最大异或值 I class Solution {public int maximumStrongPairXor(int[] a) {int na.length,max0;…

VS Code如何使用服务器的Python开发环境

❤️觉得内容不错的话&#xff0c;欢迎点赞收藏加关注&#x1f60a;&#x1f60a;&#x1f60a;&#xff0c;后续会继续输入更多优质内容❤️ &#x1f449;有问题欢迎大家加关注私戳或者评论&#xff08;包括但不限于NLP算法相关&#xff0c;linux学习相关&#xff0c;读研读博…