有n台计算机,编号为1到n。设定如果计算机a和计算机b可以通信,则计算机b和计算机a亦可以通信;如果计算机a和计算机b可以相互通信,计算机b和计算机c可以相互通信,则计算机a和计算机c亦可以相互通信。现给定某些计算机的可通信情况,请编写程序判断任意两台计算机是否可以通信。

输入格式:

输入第一行为三个整数,n、m和q。n为计算机台数;m为输入的可通信计算机的对数;q为查询数。接下来m行,每行2个整数a和b,表示计算机a和计算机b可以互相通信。接下来q行,每行2个整数c和d,即查询计算机c和d是否可以通信。每行输入的整数以空格间隔,n、m、q均不超过1000。

输出格式:

输出为q行,即对应于输入的q个查询的结果,如果可以通信,则输出1,否则输出0。

输入样例:

3 2 1
1 2
2 3
1 3

输出样例:

1

其实这题就是并查集欸,只要会基本的使用并查集就可以写啦!!!

并查集主要代码思路:

初始化:每个点的父节点(为自己)及其深度(为1)

按秩合并:降低高度,增加宽度(加快遍历速度),即选择深度大的作为父节点,但深度一样时随便定义一个为父节点(其深度要加一)

查找:(路径压缩)查询的过程中,把沿途的每个节点的父节点都设为根节点

最后就直接查找判断要找的两个是否相通就可以啦!!!

代码如下:

#include<bits/stdc++.h>
using namespace std;
#define MAXN 6000
int f[MAXN], hight[MAXN];
void init(int n) {//初始化for (int i = 1; i <= n; ++i) {f[i] = i;//父节点为自己hight[i] = 1;//节点i的深度设为1}
}
int find(int x){//查找父节点(路径压缩)
//查询的过程中,把沿途的每个节点的父节点都设为根节点return x == f[x] ? x : (f[x] = find(f[x]));
}
void hebing(int i, int j) {//按秩合并
//降低高度,增加宽度(加快遍历速度)int x = find(i), y = find(j);if (hight[x] <= hight[y])f[x] = y;else f[y] = x;if (hight[x] == hight[y] && x != y)hight[y]++;//深度相同时,将y设为x的父节点,则y树深度加一
}
int main()
{int n, m, num, x, y;cin >> n >> m >> num;init(n);for (int i = 0; i < m; ++i){cin >> x >> y;hebing(x, y);}for (int i = 0; i < num; ++i){cin >> x >> y;printf("%d\n", find(x) == find(y) ? 1 : 0);}return 0;
}

pta 计算机通信(并查集)相关推荐

  1. C++学习之路 | PTA(甲级)—— 1114 Family Property (25分)(带注释)(并查集)(精简)

    1114 Family Property (25分) This time, you are supposed to help us collect the data for family-owned ...

  2. C++学习之路 | PTA(天梯赛)—— L2-007 家庭房产 (25分)(带注释)(并查集)(精简)

    L2-007 家庭房产 (25分) 给定每个人的家庭成员和其自己名下的房产,请你统计出每个家庭的人口数.人均房产面积及房产套数. 输入格式: 输入第一行给出一个正整数N(≤1000),随后N行,每行按 ...

  3. C++学习之路 | PTA(天梯赛)—— L2-010 排座位 (25分)(带注释)(并查集)(精简)

    L2-010 排座位 (25分) 布置宴席最微妙的事情,就是给前来参宴的各位宾客安排座位.无论如何,总不能把两个死对头排到同一张宴会桌旁!这个艰巨任务现在就交给你,对任何一对客人,请编写程序告诉主人他 ...

  4. C++学习之路 | PTA(天梯赛)—— L2-013 红色警报 (25分)(带注释)(并查集)(精简)

    L2-013 红色警报 (25分) 战争中保持各个城市间的连通性非常重要.本题要求你编写一个报警程序,当失去一个城市导致国家被分裂为多个无法连通的区域时,就发出红色警报.注意:若该国本来就不完全连通, ...

  5. C++学习之路 | PTA(天梯赛)—— L2-024 部落 (25分)(带注释)(并查集)(精简)

    L2-024 部落 (25分) 在一个社区里,每个人都有自己的小圈子,还可能同时属于很多不同的朋友圈.我们认为朋友的朋友都算在一个部落里,于是要请你统计一下,在一个给定社区中,到底有多少个互不相交的部 ...

  6. C++学习之路 | PTA(天梯赛)—— L3-003 社交集群 (30分) (带注释) (并查集) (精简)

    L3-003 社交集群 (30分) 当你在社交网络平台注册时,一般总是被要求填写你的个人兴趣爱好,以便找到具有相同兴趣爱好的潜在的朋友.一个"社交集群"是指部分兴趣爱好相同的人的集 ...

  7. 7-11并查集 一笔画 数据结构 PTA

    小丁最近迷恋上一个游戏,传说中的"一笔画"游戏. 那么什么是一笔画?如下图,顾名思义就是一笔可以完成的图.一笔画最基本的要求是在画图的过程中,笔不能离开纸,且笔所画过的线不能重复, ...

  8. PTA 哥尼斯堡的“七桥问题”(并查集 + 性质判断)

    哥尼斯堡是位于普累格河上的一座城市,它包含两个岛屿及连接它们的七座桥,如下图所示. 可否走过这样的七座桥,而且每桥只走过一次?瑞士数学家欧拉(Leonhard Euler,1707-1783)最终解决 ...

  9. C++ (PTA) 红色警报 并查集

    题目: 战争中保持各个城市间的连通性非常重要.本题要求你编写一个报警程序,当失去一个城市导致国家被分裂为多个无法连通的区域时,就发出红色警报.注意:若该国本来就不完全连通,是分裂的k个区域,而失去一个 ...

最新文章

  1. 有没有将深度学习融入机器人领域的尝试?有哪些难点?
  2. html5里可移动线性进度条的类型怎么表示,HTML5触摸事件实现移动端简易进度条的实现方法...
  3. python语法实例_python基本语法练习实例
  4. SQLServer锁的机制
  5. Java 并发基础——线程安全性
  6. 前向传播算法和反向传播算法
  7. python判断是否有弹出窗口_使用Python爬取弹出窗口信息的实例
  8. 谈谈蛋疼的问题:里式替换原则:正方形是长方形吗?
  9. css横向导航栏布局,CSS04--对齐、 布局、导航栏
  10. 2021年黄石二中高考成绩查询,2020年黄石二中2020届高考总结
  11. android+路由器+名称,路由器默认wifi名称是什么?
  12. uni-app开发h5 发布后背景图片找不到路径
  13. 计算机作文1500字,网络人生作文1500字
  14. 你可能不知道的css-doodle
  15. Jack Server--Android N AOSP编译--Failed to contact Jack server
  16. html5我的心灵小屋代码,心灵小屋
  17. 激光切割机机械结构设计
  18. `符号在sql中的作用
  19. input添加邮箱的时候自动显示后缀
  20. 服务器ip控制系统叫什么,部署云服务器时ip是什么意思

热门文章

  1. 花了几天时间,总结了一份Python工程师的职业成长路径图
  2. HTML常见的扩展名,HTML文件通常带有.html或.htm的文件扩展名
  3. 汉罗塔问题和杨辉三角(java实现)
  4. Redis Desktop Manager 黑屏
  5. (完美解决)应用程序无法正常启动(0xc000007b),请单击确定关闭应用程序的解决方案
  6. 我们分析了 10000 条视频,终于知道了今日头条推荐系统的秘密
  7. 【Faster R-CNN论文精度系列】从Faster R-CNN源码中,我们“学习”到了什么?
  8. 5分钟教你如何设计一个安全web架构
  9. Java输出一个*号十字架
  10. 最常见的几种手机快充方式和原理