首页 > 其他分享 >并查集--村村通

并查集--村村通

时间:2022-10-26 20:00:45浏览次数:52  
标签:return -- 查集 Father int 道路 Result find 村村通


题目描述

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

输入格式

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

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

3 3 1 2 1 2 2 1 这组数据也是合法的。当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


#include<iostream>

using namespace std;

int Father[1005];

int find(int x) {
if (x != Father[x]) {
return Father[x] = find(Father[x]);
}
else {
return Father[x] = x;
}
}

void Join(int x, int y) {
int a = find(x);
int b = find(y);
if (a != b) {
Father[a] = b;
}
}

int N, M;

int main() {
while (true) {
int Result = 0;
scanf("%d", &N);
if (N == 0) {
return 0;
}
scanf("%d", &M);
for (int i = 1; i <= N; i++) {
Father[i] = i;
}
for (int i = 0; i < M; i++) {
int a, b;
scanf("%d%d", &a, &b);
Join(a, b);
}
for (int i = 1; i <= N; i++) {
if (Father[i] == i) {
Result++;
}
}
printf("%d\n", Result - 1);
}
return 0;
}

 

标签:return,--,查集,Father,int,道路,Result,find,村村通
From: https://blog.51cto.com/u_13121994/5798310

相关文章

  • 并查集--同时修路得到的最短时间
    题目背景AA地区在地震过后,连接所有村庄的公路都造成了损坏而无法通车。政府派人修复这些公路。题目描述给出A地区的村庄数NN,和公路数MM,公路是双向的。并告诉你每条公路的连......
  • 链表——两两交换链表中的节点
    #include<iostream>usingnamespacestd;structListNode{ intval; ListNode*next; ListNode(intval):val(val),next(NULL){};};//根据数组创建链表Lis......
  • 列表--list容器的使用(STL熟练掌握)
    题目描述一个学校里老师要将班上NN个同学排成一列,同学被编号为1\simN1∼N,他采取如下的方法:先将11号同学安排进队列,这时队列中只有他一个人;2-N2−N号同学依次入列,编号为i的......
  • .Net内置JSON序列化中文问题
    今天在用System.Text.Json序列化的时候遇到了中文序列化的一个问题,示例如下:JsonSerializer.Serialize(new{Name="你好"});预期结果是:{"Name":"你好"},但得到结果如下......
  • 洛谷 P7003
    考虑当左端点固定时,区间的\(\&\)和至多有\(\logw\)种,因为\(1\)的数量是单调不升的。所以我们可以枚举区间左端点\(i\),然后ST表预处理区间\(\&\)和+二分求出......
  • 李超线段树 学习笔记
    李超线段树学习笔记引入最近一直在做斜率优化的题,然而只会傻傻维护凸包,一到横坐标不单调,就涉及到手打平衡树,但是我实在不想学平衡树了,所以就准备掏出解决处理直线的大宝......
  • Do whlie 循环
    Dowhlie循环◆对于while语句而言,如果不满足条件,则不能进入循环。但有时候我们需要即使不满足条件,也至少执行-次。◆do...while循环和while循环相似,不同的是,do...whi......
  • AutoMapper在.Net Core WebApi中使用
    在.NetCoreWebApi里使用AutoMapper1.安装AutoMapper管理包 注意:service层中安装WebApi层也需要安装因为Webpi层有时候也需要用到Dto 2.startup在Configure......
  • CMakeList之macro
    一、定义1、可以把它理解为C++的宏,命令如下macro(<name>[<arg1>...])<commands>endmacro()定义一个名为的宏,它接受名为,…等一系列的参数。macro与endmacro之间列......
  • 【idea技巧】scratches file的使用
    在使用idea时候,url的左边有个小地球点击可以创建相应的地址,在idea本地可以测试url,不必打开网页......