pta 计算机通信(并查集)
有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 计算机通信(并查集)相关推荐
- C++学习之路 | PTA(甲级)—— 1114 Family Property (25分)(带注释)(并查集)(精简)
1114 Family Property (25分) This time, you are supposed to help us collect the data for family-owned ...
- C++学习之路 | PTA(天梯赛)—— L2-007 家庭房产 (25分)(带注释)(并查集)(精简)
L2-007 家庭房产 (25分) 给定每个人的家庭成员和其自己名下的房产,请你统计出每个家庭的人口数.人均房产面积及房产套数. 输入格式: 输入第一行给出一个正整数N(≤1000),随后N行,每行按 ...
- C++学习之路 | PTA(天梯赛)—— L2-010 排座位 (25分)(带注释)(并查集)(精简)
L2-010 排座位 (25分) 布置宴席最微妙的事情,就是给前来参宴的各位宾客安排座位.无论如何,总不能把两个死对头排到同一张宴会桌旁!这个艰巨任务现在就交给你,对任何一对客人,请编写程序告诉主人他 ...
- C++学习之路 | PTA(天梯赛)—— L2-013 红色警报 (25分)(带注释)(并查集)(精简)
L2-013 红色警报 (25分) 战争中保持各个城市间的连通性非常重要.本题要求你编写一个报警程序,当失去一个城市导致国家被分裂为多个无法连通的区域时,就发出红色警报.注意:若该国本来就不完全连通, ...
- C++学习之路 | PTA(天梯赛)—— L2-024 部落 (25分)(带注释)(并查集)(精简)
L2-024 部落 (25分) 在一个社区里,每个人都有自己的小圈子,还可能同时属于很多不同的朋友圈.我们认为朋友的朋友都算在一个部落里,于是要请你统计一下,在一个给定社区中,到底有多少个互不相交的部 ...
- C++学习之路 | PTA(天梯赛)—— L3-003 社交集群 (30分) (带注释) (并查集) (精简)
L3-003 社交集群 (30分) 当你在社交网络平台注册时,一般总是被要求填写你的个人兴趣爱好,以便找到具有相同兴趣爱好的潜在的朋友.一个"社交集群"是指部分兴趣爱好相同的人的集 ...
- 7-11并查集 一笔画 数据结构 PTA
小丁最近迷恋上一个游戏,传说中的"一笔画"游戏. 那么什么是一笔画?如下图,顾名思义就是一笔可以完成的图.一笔画最基本的要求是在画图的过程中,笔不能离开纸,且笔所画过的线不能重复, ...
- PTA 哥尼斯堡的“七桥问题”(并查集 + 性质判断)
哥尼斯堡是位于普累格河上的一座城市,它包含两个岛屿及连接它们的七座桥,如下图所示. 可否走过这样的七座桥,而且每桥只走过一次?瑞士数学家欧拉(Leonhard Euler,1707-1783)最终解决 ...
- C++ (PTA) 红色警报 并查集
题目: 战争中保持各个城市间的连通性非常重要.本题要求你编写一个报警程序,当失去一个城市导致国家被分裂为多个无法连通的区域时,就发出红色警报.注意:若该国本来就不完全连通,是分裂的k个区域,而失去一个 ...
最新文章
- 有没有将深度学习融入机器人领域的尝试?有哪些难点?
- html5里可移动线性进度条的类型怎么表示,HTML5触摸事件实现移动端简易进度条的实现方法...
- python语法实例_python基本语法练习实例
- SQLServer锁的机制
- Java 并发基础——线程安全性
- 前向传播算法和反向传播算法
- python判断是否有弹出窗口_使用Python爬取弹出窗口信息的实例
- 谈谈蛋疼的问题:里式替换原则:正方形是长方形吗?
- css横向导航栏布局,CSS04--对齐、 布局、导航栏
- 2021年黄石二中高考成绩查询,2020年黄石二中2020届高考总结
- android+路由器+名称,路由器默认wifi名称是什么?
- uni-app开发h5 发布后背景图片找不到路径
- 计算机作文1500字,网络人生作文1500字
- 你可能不知道的css-doodle
- Jack Server--Android N AOSP编译--Failed to contact Jack server
- html5我的心灵小屋代码,心灵小屋
- 激光切割机机械结构设计
- `符号在sql中的作用
- input添加邮箱的时候自动显示后缀
- 服务器ip控制系统叫什么,部署云服务器时ip是什么意思
热门文章
- 花了几天时间,总结了一份Python工程师的职业成长路径图
- HTML常见的扩展名,HTML文件通常带有.html或.htm的文件扩展名
- 汉罗塔问题和杨辉三角(java实现)
- Redis Desktop Manager 黑屏
- (完美解决)应用程序无法正常启动(0xc000007b),请单击确定关闭应用程序的解决方案
- 我们分析了 10000 条视频,终于知道了今日头条推荐系统的秘密
- 【Faster R-CNN论文精度系列】从Faster R-CNN源码中,我们“学习”到了什么?
- 5分钟教你如何设计一个安全web架构
- Java输出一个*号十字架
- 最常见的几种手机快充方式和原理