题目大意

给出N个操作,每个操作可能为两种类型之一: 
1. 认定两个人属于同一个组织 
2. 查询两个人是否是同一个组织

要求对于每个操作类型2,给出结果,即查询的两个人是否属于同一个组织。其中,任何人都可以通过名字唯一确定。

分析

简单的并查集操作,直接使用哈希表存储名字字符串作为并查集树,而不用整数数组。unordered_map.

实现

  1. #include<iostream>
  2. #include<string.h>
  3. #include<iostream>
  4. #include<queue>
  5. #include<unordered_map>
  6. #include<string>
  7. using namespace std;
  8. unordered_map<string, string> root; //存放并查集树节点,以及对应的根
  9. string GetRoot(string node){
  10. if (node == root[node])
  11. return node;
  12. return root[node] = GetRoot(root[node]);
  13. }
  14. void Union(string person1, string person2){
  15. string p1 = GetRoot(person1);
  16. string p2 = GetRoot(person2);
  17. root[p2] = p1;
  18. }
  19. bool SameRoot(string person1, string person2){
  20. string p1 = GetRoot(person1);
  21. string p2 = GetRoot(person2);
  22. return p1 == p2;
  23. }
  24. int main(){
  25. int n, op;
  26. string person1, person2;
  27. cin >> n;
  28. while (n--){
  29. cin >> op >> person1 >> person2;
  30. if (root.find(person1) == root.end()){
  31. root[person1] = person1;
  32. }
  33. if (root.find(person2) == root.end()){
  34. root[person2] = person2;
  35. }
  36.  
  37. if (op == 0){
  38. Union(person1, person2);
  39. }
  40. else{
  41. if (SameRoot(person1, person2))
  42. printf("yes\n");
  43. else
  44. printf("no\n");
  45. }
  46. }
  47. return 0;
  48. }

hiho_1066_并查集的更多相关文章

  1. BZOJ 4199: [Noi2015]品酒大会 [后缀数组 带权并查集]

    4199: [Noi2015]品酒大会 UOJ:http://uoj.ac/problem/131 一年一度的“幻影阁夏日品酒大会”隆重开幕了.大会包含品尝和趣味挑战两个环节,分别向优胜者颁发“首席品 ...

  2. 关押罪犯 and 食物链(并查集)

    题目描述 S 城现有两座监狱,一共关押着N 名罪犯,编号分别为1~N.他们之间的关系自然也极不和谐.很多罪犯之间甚至积怨已久,如果客观条件具备则随时可能爆发冲突.我们用"怨气值"( ...

  3. 图的生成树(森林)(克鲁斯卡尔Kruskal算法和普里姆Prim算法)、以及并查集的使用

    图的连通性问题:无向图的连通分量和生成树,所有顶点均由边连接在一起,但不存在回路的图. 设图 G=(V, E) 是个连通图,当从图任一顶点出发遍历图G 时,将边集 E(G) 分成两个集合 T(G) 和 ...

  4. bzoj1854--并查集

    这题有一种神奇的并查集做法. 将每种属性作为一个点,每种装备作为一条边,则可以得到如下结论: 1.如果一个有n个点的连通块有n-1条边,则我们可以满足这个连通块的n-1个点. 2.如果一个有n个点的连 ...

  5. [bzoj3673][可持久化并查集 by zky] (rope(可持久化数组)+并查集=可持久化并查集)

    Description n个集合 m个操作 操作: 1 a b 合并a,b所在集合 2 k 回到第k次操作之后的状态(查询算作操作) 3 a b 询问a,b是否属于同一集合,是则输出1否则输出0 0& ...

  6. [bzoj3123][sdoi2013森林] (树上主席树+lca+并查集启发式合并+暴力重构森林)

    Description Input 第一行包含一个正整数testcase,表示当前测试数据的测试点编号.保证1≤testcase≤20. 第二行包含三个整数N,M,T,分别表示节点数.初始边数.操作数 ...

  7. 【BZOJ-3673&3674】可持久化并查集 可持久化线段树 + 并查集

    3673: 可持久化并查集 by zky Time Limit: 5 Sec  Memory Limit: 128 MBSubmit: 1878  Solved: 846[Submit][Status ...

  8. Codeforces 731C Socks 并查集

    题目:http://codeforces.com/contest/731/problem/C 思路:并查集处理出哪几堆袜子是同一颜色的,对于每堆袜子求出出现最多颜色的次数,用这堆袜子的数目减去该值即为 ...

  9. “玲珑杯”ACM比赛 Round #7 B -- Capture(并查集+优先队列)

    题意:初始时有个首都1,有n个操作 +V表示有一个新的城市连接到了V号城市 -V表示V号城市断开了连接,同时V的子城市也会断开连接 每次输出在每次操作后到首都1距离最远的城市编号,多个距离相同输出编号 ...

随机推荐

  1. 制作动画效果:《CSS3 Animation》

    在开始介绍Animation之前我们有必要先来了解一个特殊的东西,那就是"Keyframes",我们把他叫做“关键帧”,玩过flash的朋友可能对这个东西并不会陌生.下面我们就一起 ...

  2. jquery简单插件到复杂插件(2)--简单手风琴

    手风琴就是展示与隐藏 <div id="dataContent"> <div class="dataLeft fl"> <div ...

  3. 局域网无法访问vmware虚拟机WEB服务器解决办法

    环境:虚拟机服务器是centos,apache+php+mysql环境,但是局域网无法访问 1.本机能ping通虚拟机 2.虚拟机也能ping通本机 3.虚拟机能访问自己的web 4.本机无法访问虚拟 ...

  4. CentOS6.5下MAC

    CentOS6.3安装Mac桌面主题 (2013-03-28 14:31:42) 转载▼     首先下载Mac4Lin_Install_v1.0.zip             我给出个下载地址ht ...

  5. sql 第 10条 到20条

    sql 第 10条 到20条 select * from( select *,ROW_NUMBER () over (order by @@servername) as rownum from tb_ ...

  6. 嵌入式学习_AD学习篇

    AD基础使用: 1.建立一个工作区 (.DsnWrk) workspace 2.建立一个PCB工程(.PrjPCB)  project 3.建立一个PCB原理图文件(理论上告诉你两个点连接起来) 建立 ...

  7. js css 构建滚动边框

    注:预览效果请点击result选项卡,个人认为这种效果非常适合做友情链接. 完整代码 <!DOCTYPE html> <html xmlns="http://www.w3. ...

  8. TCP连接的状态详解以及故障排查

    我们通过了解 TCP各个状态 ,可以排除和定位网络或系统故障时大有帮助. 一.TCP状态 LISTENING :侦听来自远方的TCP端口的连接请求 . 首先服务端需要打开一个 socket 进行监听, ...

  9. 【leetcode❤python】 20. Valid Parentheses

    #-*- coding: UTF-8 -*-#利用栈的思想#如果输入的左测扩则入栈,如果输入为右侧扩,判断其是否与当前栈顶配对,如果匹配则删除这一对,否则return False#'(', ')', ...

  10. Cheatsheet: 2013 09.22 ~ 09.30

    Other Python basics summary Another article about big O notation Mobile Getting Started with PhoneGa ...