DongDong认亲戚 - 并查集

简介: DongDong认亲戚 - 并查集

题目描述

DongDong每年过春节都要回到老家探亲,然而DongDong记性并不好,没法想起谁是谁的亲戚(定义:若A和B是亲戚,B和C是亲戚,那么A和C也是亲戚),她只好求助于会编程的你了。

输入描述:

第一行给定n,m表示有n个人,m次操作

第二行给出n个字符串,表示n个人的名字分别是什么(如果出现多个人名字相同,则视为同一个人)(保证姓名是小写字符串)

接下来m行,每行输入一个数opt,两个字符串x,y

当opt=1时,表示x,y是亲戚

当opt=2时,表示询问x,y是否是亲戚,若是输出1,不是输出0

数据范围:1<=n,m<=20000,名字字符长度小等于10

输出描述:

对于每个2操作给予回答

示例1

输入

4 4

chen lin yi cheng

2 chen lin

1 chen lin

1 yi lin

2 yi lin

输出

0

1

思路

并查集模板题,我写了一个路径压缩和按秩合并的板子,一般来说够用了

#include<iostream>
#include<algorithm>
#include<map>
using namespace std;
const int N = 1e5+10;

string s[N];
// dep 代表的是每个以i节点为根的子树的深(高)度 
int dep[N];
// i的父亲节点是 fa[i] 
int fa[N];

void init() {
  for(int i=1;i<=100000;i++) {
    fa[i]=i;
    rank[i]=1; 
  }
} 

int find(int x) {
  return x == fa[x]?x:(fa[x]=find(fa[x]));
}

void merge(int i,int j) {
  // x是i的爹 ,y是j的爹 
  int x = find(i);
  int y = find(j);
  
  //这里是判断两棵树分别的深度
  //将 深度小的树 往 深度大的树 上合并 
  //以免出现树越来高的情况 
  if(dep[x]<=dep[y]) fa[x] = y;
  else fa[y]=x;
  
  //如果两棵不同的树高度一样,那么随便谁合并谁都行,但是高度会加一(相当于加的是那个树的根) 
  if(dep[x]==dep[y] && x!=y) {
    dep[y]++;
  }
}

// map 映射一下 字符串 -> [1,n]的数字 
map<string,int>mp;
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  
  int n,m,op;
  cin>>n>>m;
  string x,y;
  
  for(int i=1;i<=n;i++) cin>>s[i],mp[s[i]]=i,fa[i]=i,dep[i]=1;
  while(m--) {
    cin>>op>>x>>y;
    if(op == 1) {
      merge(mp[x],mp[y]);
    }else {
      int i = find(mp[x]);
      int j = find(mp[y]);
      cout<<(i==j?1:0)<<endl;
    }
  }
  
  return 0;
} 

目录
相关文章
|
9月前
|
运维 监控 算法
时间序列异常检测:MSET-SPRT组合方法的原理和Python代码实现
MSET-SPRT是一种结合多元状态估计技术(MSET)与序贯概率比检验(SPRT)的混合框架,专为高维度、强关联数据流的异常检测设计。MSET通过历史数据建模估计系统预期状态,SPRT基于统计推断判定偏差显著性,二者协同实现精准高效的异常识别。本文以Python为例,展示其在模拟数据中的应用,证明其在工业监控、设备健康管理及网络安全等领域的可靠性与有效性。
1043 13
时间序列异常检测:MSET-SPRT组合方法的原理和Python代码实现
|
SQL 安全 Java
JavaSecLab 一款综合Java漏洞平台
JavaSecLab是一款综合型Java漏洞学习平台,涵盖多种漏洞场景,提供漏洞代码、修复示例、安全编码规范及友好UI。适用于安全服务、甲方安全培训、安全研究等领域,助于理解漏洞原理与修复方法。支持跨站脚本、SQL注入等多种漏洞类型……
405 2
|
测试技术
BOSHIDA DC电源模块的开发周期
BOSHIDA DC电源模块的开发周期 DC电源模块是一种被广泛应用于电力系统中的设备,它能够将交流电转换成为直流电,为电子设备提供可靠、稳定的电源。DC电源模块的开发周期涉及到多个方面,包括设计、测试、验证、批量生产等环节。本文将从这几个方面分析DC电源模块的开发周期,以期对读者有所帮助。
BOSHIDA DC电源模块的开发周期
Foundation 网格实例3
通过使用 .small|medium|large-push-* 和 .small|medium|large-pull-* 类可以灵活调整列的顺序,示例如下:.small-4 .small-8-push .small-8 .small-4-pull。此外,还可以在列中嵌套其他列,创建复杂的布局,如:.small-8 中嵌套 .small-8 和 .small-4。
|
机器学习/深度学习 数据挖掘
二、机器学习之回归模型分析
二、机器学习之回归模型分析
968 0
|
机器学习/深度学习 算法
基于小波神经网络的数据分类算法matlab仿真
该程序基于小波神经网络实现数据分类,输入为5个特征值,输出为“是”或“否”。使用MATLAB 2022a版本,50组数据训练,30组数据验证。通过小波函数捕捉数据局部特征,提高分类性能。训练误差和识别结果通过图表展示。
|
JavaScript 前端开发 IDE
如何像人类一样写JavaScript代码(包会)之函数基本使用
如何像人类一样写JavaScript代码(包会)之函数基本使用
115 1
如何像人类一样写JavaScript代码(包会)之函数基本使用
|
弹性计算 容灾 安全
阿里云服务器购买指南(一篇搞定)
阿里云服务器购买指南,2023阿里云服务器选购流程更新,选购云服务器有两个入口,一个是选择活动机,只需要选择云服务器地域、系统、带宽即可;另一个是在云服务器页面,自定义选择云服务器配置,这种方式购买云服务器较为复杂,需要选付费方式、地域及可用区、ECS实例规格、镜像、网络、公网IP、安全组等配置,阿里云百科来阿里云服务器购买流程指南2023新版教程:
461 0
|
存储 传感器 监控
消费者医疗保健中的物联网应用
美国将近85%的成年人每年至少看一次医生,而美国的儿童则以每年93%的比例超过这个数字。在医疗保健消费方面,我们必须在更大的范围内看到这些数字:与医疗服务提供者的见面并不是人们唯一一次检查其健康状况的时间。实际上,随着可穿戴技术的兴起以及几乎持续的互联网访问,我们可以获得包括日常活动,营养,心率,血糖等诸多方面的实时反馈循环。
329 0
消费者医疗保健中的物联网应用
|
存储 算法 图形学
关于图片的PNG与JPG、JIF格式
关于图片的PNG与JPG、JIF格式
1535 0