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
ps:一看就是并查集模板题,但不同的是,一般的并查集题都是具体的数字进行并查操作,而这道题是用字符串进行操作,很容易想到把每个字符串当成某个确定的数字,再进行操作,然后果断一个TLE教做人,后来我又想到用set来存,发现还是同样的问题没解决,最后才知道可以用map来存名字,map就是一种映射关系,就可以把字符串模拟成数组(很像JavaScript里面的自定义数组)那种,进行并与查的操作,具体看代码。

我的垃圾 代码

#include<bits/stdc++.h>
using namespace std;
unordered_map<string, string> root; //存放每个人,以及对应的祖先,其跟map的区别是可以存相同的键,用法都大致相同
string GetRoot(string node){  //找祖先if (node == root[node])return node;return root[node] = GetRoot(root[node]);
}
void Union(string person1, string person2){//将两人合并为亲戚string p1 = GetRoot(person1);string p2 = GetRoot(person2);root[p2] = p1;
}
bool SameRoot(string person1, string person2){//查找是否是亲戚string p1 = GetRoot(person1);string p2 = GetRoot(person2);return p1 == p2;
}
int main(){int n,op,m;string person1, person2;cin >> n>>m;for(int i=0;i<n;i++){cin>>person1;root[person1]=person1;}while (m--){cin>>op>>person1>>person2;if (op ==1 ){Union(person1, person2);}else{if (SameRoot(person1, person2))printf("1\n");elseprintf("0\n");}}return 0;
}

神仙的代码,orz,这也太nb了,菜鸡已经看呆了

#include<bits/stdc++.h>
using namespace std;
unordered_map<string,string>M;
string t,tt;
int n,m,o,i;
string find(string x){return x==M[x]?x:M[x]=find(M[x]);
}
int main()
{cin>>n>>m;for(i=0;i<n;i++)cin>>t,M[t]=t;for(i=0;i<m;i++)cin>>o>>t>>tt,o==1?(M[find(tt)]=find(t),0):(puts(find(t)==find(tt)?"1":"0"));
}

并查集模板题(stl 中map的运用)相关推荐

  1. 战争来临(并查集模板题)

    战争来临(并查集模板题) 描述   那一个骑单车卖报纸的少年 恐慌的眼泪慢慢布满了侧脸----<战争世界>   B国对A国发动了侵略战争,A国不得不全力抵御.A国幅员辽阔,后方群众的支援补 ...

  2. 【SCAU 新生赛】18247 aler的旅游计划 并查集模板题

    18247 aler的旅游计划 该题有题解 时间限制:1000MS 代码长度限制:10KB 提交次数:15 通过次数:0 收入:10 题型: 编程题 语言: 不限定 Description aler想 ...

  3. 【畅通工程 HDU - 1232 】【并查集模板题】

    并查集讲解和模板 有一个博文对此分析的很透彻,附链接 为避免原链接失效,现摘录如下: 为了解释并查集的原理,我将举一个更有爱的例子. 话说江湖上散落着各式各样的大侠,有上千个之多.他们没有什么正当职业 ...

  4. PAT题解-1118. Birds in Forest (25)-(并查集模板题)

    如题... #include <iostream> #include <cstdio> #include <algorithm> #include <stri ...

  5. 洛谷P1536村村通(并查集模板题)

    问题出处: https://www.luogu.com.cn/problem/P1536 题目描述: 某市调查城镇交通状况,得到现有城镇道路统计表.表中列出了每条道路直接连通的城镇.市政府 " ...

  6. POJ1703【Find them, Catch them】(并查集模板题)

    题目地址:POJ1703[Find them, Catch them] 题目描述: Tadu市的警察局决定结束混乱,因此要采取行动,根除城市中的两大帮派:龙帮和蛇帮.然而,警方首先需要确定某个罪犯是属 ...

  7. HDU 1213 How Many Tables(并查集模板)

    http://acm.hdu.edu.cn/showproblem.php?pid=1213 题意: 这个问题的一个重要规则是,如果我告诉你A知道B,B知道C,这意味着A,B,C知道对方,所以他们可以 ...

  8. 强盗团伙(啊哈-并查集[模板])

    题目 快过年了,犯罪分子们也开始为年终奖"奋斗"了,小哼的家乡出现了多次抢劫事件.由于强盗人数过于庞大,作案频繁,警方想查清楚到底有几个犯罪团伙实在是太不容易了,不过警察叔叔还是搜 ...

  9. 【CCCC】L3-003 社交集群 (30分),并查集模板,map排序

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

最新文章

  1. 6、kubernetes 核心技术-Pod
  2. CSS 公共样式分享
  3. Oracle游标的使用
  4. 【NLP】如何利用BERT来做基于阅读理解的信息抽取
  5. Nacos安装和服务注册
  6. Linux查看:crontab开启状态
  7. HADOOP:Current usage: 399.9 MB of 1 GB physical memory used; 2.5 GB of 2.1 GB virtual memory used.
  8. TextView显示html信息、在文本下面添加下划线、中划线、设置图片
  9. PHP 三种方式实现链式操作
  10. windows10连接共享打印机报错:错误 0x00000709 解决方法
  11. Redis 哨兵模式安装方法
  12. 微信公众号平台如何批量给粉丝自动打标签分组
  13. 楷书书法规则_楷书的结构法则
  14. cad相对坐标快捷键_CAD相对坐标和绝对坐标有什么区别?
  15. 土方量方lisp_时隔3年,再做双倍超立方数的题目,这次用Lisp
  16. pcl opencv ROS_message三者之间点云和图片类型转换总结
  17. oracle 11g 下载
  18. 图说slam(一):amcl定位算法主要流程概念图解
  19. 当输入 https://www.baidu.com 时,返回页面的过程中发生了什么?
  20. 【Linux】ifconfig命令详解

热门文章

  1. mybatis多表关联映射
  2. MapStruct - 一篇就能上手 MapStruct
  3. EBS:PO_HEADERS_ALL
  4. [STM32F1官方例程讲解2] 模拟看门狗Analog Watchdog
  5. linux怎么查看防火墙开放的端口,linux查看防火墙状态和对外开放的端口状态
  6. 科研论文中的地图怎么绘制?
  7. JAVA程序员的日常工作是什么?一文告诉知道
  8. windows内核编程读书摘抄
  9. 设置双核浏览器的浏览模式
  10. Lecture 1: Probability Models and Axioms