时间限制:1 s

空间限制:128 M

传送门:https://oj.ahstu.cc/JudgeOnline/problem.php?id=1190

题目描述

机房里有若干台电脑,其中有一些电脑已经相互连接。如果A和B通过网线相连,并且B与C也通过网线相连,那么即便A和C之间没有直接的网线相连,也可以认为A和C是相连的。由于机房里的布线比较乱,并不是所有电脑都相互连通,请问在不变动当前布线情况下,最少要购买几条网线才能使得机房所有电脑都两两连通。 

输入

多组数据。每组数据第一行为整数N,M。N是电脑数量,M是机房已布置好的网线数量。接下来M行,每行为整数A,B。表明A,B之间通过一条网线直接相连。这里可以认为网线是不分方向的,即A->B等价于B->A。 
(0 < N <= 200,0 <= M <= 10000,0 < A,B <= N 。) N=0和M=0为输入结束,不需要处理。 

输出

每组一个整数,即最少还要购买几根网线。

样例输入

4 2
1 2
2 3
4 0
1 0
0 0

样例输出

1
3
0

思路:用并查集存储,若是连在一起的电脑就存到一个集合里面,最后判断下有几个集合,答案就是集合个数减一。在连接集合的时候设左边为父结点。

代码:

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4
 5 using namespace std;
 6 int fina(int num);
 7 int n, m, a[2010];
 8
 9 int main()
10 {
11     cin >> n >> m;
12
13     while (n || m)
14     {
15         for (int i = 1; i <= n; i ++ )
16             a[i] = i;
17         int x, y;
18         while (m -- )
19         {
20             cin >> x >> y;
21             if (fina(x) != fina(y))
22             {
23                 a[fina(y)] = fina(x);
24             }
25         }
26         int ans = 0;
27         for (int i = 1; i <= n; i ++ )
28             if (a[i] == i)   ans ++ ;
29
30         cout << ans - 1 << endl;
31         cin >> n >> m;
33         memset(a,0,sizeof(a));
34     }
35     return 0;
36 }
37
38 int fina(int num)
39 {
40     if (num == a[num])  return num;
41     else
42     {
43         a[num] = fina(a[num]);
44         return a[num];
45     }
46 }

PS:应该是安科 OJ 数据的问题,题目说的 n <= 200,但是数组开到210就会越界,开到2010才行(当时debug了好久,555~)

转载于:https://www.cnblogs.com/chuyds/p/11241019.html

安科 OJ 1190 连接电脑 (并查集)相关推荐

  1. leetcode684. 冗余连接(并查集)

    在本问题中, 树指的是一个连通且无环的无向图. 输入一个图,该图由一个有着N个节点 (节点值不重复1, 2, -, N) 的树及一条附加的边构成.附加的边的两个顶点包含在1到N中间,这条附加的边不属于 ...

  2. LeetCode 684. 冗余连接(并查集)

    1. 题目 在本问题中, 树指的是一个连通且无环的无向图. 输入一个图,该图由一个有着N个节点 (节点值不重复1, 2, -, N) 的树及一条附加的边构成.附加的边的两个顶点包含在1到N中间,这条附 ...

  3. leetcode 684. Redundant Connection | 684. 冗余连接(并查集)

    题目 https://leetcode.com/problems/redundant-connection/ 题解 并查集问题 1)有若干个样本a.b.c.d-类型假设是V 2)在并查集中一开始认为每 ...

  4. 安捷伦示波器连接电脑

    调试或者测试电路的过程中,示波器是比不可少的东西,且常需要保存示波器的波形,可以通过一条网线把示波器与电脑连接起来,这样就可以在电脑上方便的保存波形图,怎么实现示波器和电脑连接,我们以安捷伦示波器DS ...

  5. 九度OJ 1024 畅通工程 -- 并查集、贪心算法(最小生成树)

    题目地址:http://ac.jobdu.com/problem.php?pid=1024 题目描述: 省政府"畅通工程"的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有 ...

  6. LeetCode 685. 冗余连接 II(并查集)

    1. 题目 在本问题中,有根树指满足以下条件的有向图.该树只有一个根节点,所有其他节点都是该根节点的后继. 每一个节点只有一个父节点,除了根节点没有父节点. 输入一个有向图,该图由一个有着N个节点 ( ...

  7. leetcode 721. Accounts Merge | 721. 账户合并(HashMap版并查集)

    题目 https://leetcode.com/problems/accounts-merge/ 题解 HashMap 版的并查集.参考了:leetcode 684. Redundant Connec ...

  8. LeetCode 1697. 检查边长度限制的路径是否存在(排序+并查集)

    文章目录 1. 题目 2. 解题 1. 题目 给你一个 n 个点组成的无向图边集 edgeList ,其中 edgeList[i] = [ui, vi, disi] 表示点 ui 和点 vi 之间有一 ...

  9. LeetCode 886. 可能的二分法(着色DFS/BFS/拓展并查集)

    文章目录 1. 题目 2. 解题 2.1 DFS 2.2 BFS 2.3 并查集 1. 题目 给定一组 N 人(编号为 1, 2, -, N), 我们想把每个人分进任意大小的两组. 每个人都可能不喜欢 ...

最新文章

  1. 在RedHat上安装gcc,java 和 eclipse-rcp
  2. python pip gpl_一文了解Python的pip工具
  3. mysql用in报错_Mysql子查询IN中使用LIMIT
  4. python 语音识别机器人控制系统_python人脸识别+语音识别 的监控系统
  5. 大数据技术之 Kafka (第 3 章 Kafka 架构深入 ) Kafka 消费者
  6. iOS时间转换相关整理(附送试用期逻辑处理)
  7. 使用java来进行分词处理
  8. 计算机教师招聘板书设计,教师编制考试:信息技术丨《WORD表格制作》教案设计...
  9. 超轻量级Web安全漏洞扫描工具Netsparker使用教程介绍
  10. linux降低交叉编译器版本,嵌入式ARM+Linux 多個不同版本的交叉編譯器的切換方法...
  11. 2021年度盘点|民宿发展"春水涌动"
  12. java绘制图形_java怎么绘制简单图形
  13. 解决QQ群文件未通过安全检测无法下载问题
  14. Unity导入fbx模型贴图不显示的问题
  15. 华为云物联网平台的微信小程序开发
  16. 封装好的散点图拟合八大函数回归模型(逆、幂函、对数、S、复合、生长、指数 、线性函数,)
  17. mysql修改初始密码/ 重置默认密码 You must reset your password using ALTER USER statement
  18. 计算机的启动及关闭方法,如何关闭开机启动项
  19. maven 系列 02 - packing 类型
  20. 激情个P—leo看赢在中国第三季(2)

热门文章

  1. 深入探究Python中的字典容器
  2. 2018年第九届蓝桥杯C/C++ A组国赛 —— 第二题:阅兵方阵
  3. 《信息学奥赛一本通》高精除以高精,求它们的商和余数。
  4. ubuntu下超级用户和普通用户
  5. 【Qt】简单QT文本编辑器
  6. 【Linux系统编程】互斥锁
  7. 【Linux】一步一步学Linux——groupdel命令(88)
  8. 改变窗口背景_办公软件操作技巧063:如何设置ppt母版背景
  9. 凡子谷机器人创客教育_【活动纪实】机器人创客教育课堂——液压升降台
  10. mysql error 1148_MYSQL入坑第一弹--------ERROR 1148 (42000)ERROR 1290 (HY000)