好朋友 并查集问题

博客探讨了如何利用并查集解决数码宝贝之间的好朋友关系问题。根据传递性和互反性的规则,通过合并操作确定数码宝贝的组数。代码实现和运行结果展示了解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

规定:

  1. 互反性:A和B是好朋友,等价于B和A是好朋友;
  2. 传递性:A和B是好朋友,B和C是好朋友,则A和C也是好朋友;
  3. 每组中任意两个都得是好朋友,每两组中不存在好朋友。

这题明显就是求并查集问题,如果是好朋友,那么他们的根节点相同,因此可以对每次输入的数字进行合并判断,若根节点不同则不在一组,如果根节点相同就在一组,因此根节点的数量就是输出的组数。

题:有一个叫做“数码世界”奇异空间,在数码世界里生活着许许多多的数码宝贝,其中有些数码宝贝之间可能是好朋友,并且数码宝贝世界有两条不成文的规定:第一,数码宝贝A和数码宝贝B是好朋友等价于数码宝贝B与数码宝贝A是好朋友;第二,如果数码宝贝A和数码宝贝C是好朋友,而数码宝贝B和数码宝贝C也是好朋友,那么A和B也是好朋友。
现在给出这些数码宝贝中所有好朋友的信息问:可以把这些数码宝贝分成多少组,满足每组中的任意两个数码宝贝都是好朋友,而且任意两组之间的数码宝贝都不是好朋友

输入:

7 5
1 2
2 3
3 1
1 4
5 6

代码如下:

#include<stdio.h>
const int maxn = 110;
int father[maxn] = {
   
   0};      //记录每一个元素的父亲结点
bool isRoot[maxn] = {
   
   false};        //某个元素是不是根节点
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值