题目链接:https://cn.vjudge.net/problem/CodeForces-766D

题意

写词典,有些词是同义词,有些是反义词,还有没关系的词

首先输入两个词,需要判断是同义还是是反义,若没关系就按操作归为同义或反义

思路

经典并查集的动物园问题

维护两个并查集,find(a)表示a的同类代表元,find(a+maxn)表示异类代表元

find(a)find(b) && find(a+maxn)find(b+maxn) 就是说ab同类

find(a+maxn)find(b) && find(a)find(b+maxn) 就是说ab异类

其他就是没关系,需要合并

提交过程

WA 输出问题,NO写成ON,老毛病
AC

代码

#include <map>
#include <cstdio>
#include <string>
#include <cstring>
using namespace std;
const int maxn=1e5+20;
int pre[maxn*2];
map<string, int> toid; int find(int x){
return (x==pre[x])?x:(pre[x]=find(pre[x]));
} int join(int a, int b){
a=find(a); b=find(b);
if (a!=b) pre[a]=b;
} int main(void){
int n, m, q;
char str[100], bstr[100]; while (scanf("%d%d%d", &n, &m, &q)==3 && n){
toid.clear();
for (int i=1; i<=n; i++){
scanf("%s", str);
toid[string(str)]=i;
} int arg, a, b;
for (int i=1; i<=maxn*2; i++) pre[i]=i;
for (int i=0; i<m; i++){
scanf("%d%s%s", &arg, str, bstr);
a=toid[string(str)];
b=toid[string(bstr)]; if (find(a)==find(b) && find(a+maxn)==find(b+maxn)){
if (arg==1) printf("YES\n");
else printf("NO\n");
}else if (find(a)==find(b+maxn) && find(a+maxn)==find(b)){
if (arg==2) printf("YES\n");
else printf("NO\n");
}else{
printf("YES\n");
if (arg==1) {join(a, b); join(a+maxn, b+maxn);}
else {join(a, b+maxn); join(a+maxn, b);}
}
} while (q--){
scanf("%s%s", str, bstr);
a=toid[string(str)];
b=toid[string(bstr)]; if (find(a)==find(b) && find(a+maxn)==find(b+maxn)){
printf("1\n");
}else if (find(a)==find(b+maxn) && find(a+maxn)==find(b)){
printf("2\n");
}else printf("3\n");
}
} return 0;
}
Time Memory Length Lang Submitted
732ms 8380kB 1328 GNU G++ 5.1.0 2018-07-28 14:45:06

CodeForces-766D Mahmoud and a Dictionary 并查集 维护同类不同类元素集合的更多相关文章

  1. Codeforces 766D. Mahmoud and a Dictionary 并查集 二元敌对关系 点拆分

    D. Mahmoud and a Dictionary time limit per test:4 seconds memory limit per test:256 megabytes input: ...

  2. Codeforces 766D Mahmoud and a Dictionary 2017-02-21 14:03 107人阅读 评论(0) 收藏

    D. Mahmoud and a Dictionary time limit per test 4 seconds memory limit per test 256 megabytes input ...

  3. [Codeforces 1027 F] Session in BSU [并查集维护二分图匹配问题]

    题面 传送门 思路 真是一道神奇的题目呢 题目本身可以转化为二分图匹配问题,要求右半部分选择的点的最大编号最小的一组完美匹配 注意到这里左边半部分有一个性质:每个点恰好连出两条边到右半部分 那么我们可 ...

  4. Codeforces Round #396 (Div. 2) D. Mahmoud and a Dictionary 并查集

    D. Mahmoud and a Dictionary 题目连接: http://codeforces.com/contest/766/problem/D Description Mahmoud wa ...

  5. CodeForces 766D Mahmoud and a Dictionary

    并查集. 将每一个物品拆成两个,两个意义相反,然后并查集即可. #pragma comment(linker, "/STACK:1024000000,1024000000") #i ...

  6. Codeforces.1051G.Distinctification(线段树合并 并查集)

    题目链接 \(Description\) 给定\(n\)个数对\(A_i,B_i\).你可以进行任意次以下两种操作: 选择一个位置\(i\),令\(A_i=A_i+1\),花费\(B_i\).必须存在 ...

  7. Codeforces.1027F.Session in BSU(思路 并查集)

    题目链接 \(Description\) 有\(n\)个人都要参加考试,每个人可以在\(ai\)或\(bi\)天考试,同一天不能有两个人考试.求最晚考试的人的时间最早能是多少.无解输出-1. \(So ...

  8. hihoCoder #1291 : Building in Sandbox 逆向处理+并查集维护

    /** 题目:#1291 : Building in Sandbox 链接:https://hihocoder.com/problemset/problem/1291 题意:就是一个三维的空间里,按照 ...

  9. Codeforces325 D【并查集维护连通性】

    参考:大牛blog 思路: 因为是环,所以可以复制一下图,先判断一下和他是不是和与他相邻的8个之一的一个障碍使得构成了一个环,环就是一个连通,用并查集维护即可: 如果没有就ans++,然后并把这个点加 ...

随机推荐

  1. LeetCode Golang 4. 寻找两个有序数组的中位数

    4. 寻找两个有序数组的中位数 很明显我偷了懒, 没有给出正确的算法,因为官方的解法需要时间仔细看一下... func findMedianSortedArrays(nums1 []int, nums ...

  2. 陆、jq基础语法

    一.概述:更加方便的处理html文档.events事件.动画效果和ajax交互等. 1.jq主要功能: (1)访问页面框架的局部. (2)修改页面表现 (3)更改页面的内容 (4)响应事件 (5)为页 ...

  3. 搭建hadoop、hdfs环境--ubuntu(完全分布式)

    最近在学习hadoop相关知识,就在本机上安装了hadoop,遇到了一些坑,也学到了不少.仅此记录我的安装过程,及可能遇到的问题.供参考.交流沟通见页末. 软件准备 >  虚拟机(VMware) ...

  4. -ms-,-moz-,-webkit-,-o-含义及各浏览器内核整理

    transform:rotate(30deg);                   //统一标识语句 -ms-transform:rotate(30deg);      //-ms代表ie内核识别码 ...

  5. 在用HTML+css写页面中遇到的问题

    一.清除浮动. (1)verflow:hidden;这个CSS样式是大家常用到的CSS样式,但是大多数人对这个样式的理解仅仅局限于隐藏溢出,而对于清除浮动这个含义不是很 了解.一提到清除浮动,我们就会 ...

  6. 【XSY3306】alpha - 线段树+分治NTT

    题目来源:noi2019模拟测试赛(一) 题意: 题解: 这场三道神仙概率期望题……orzzzy 这题暴力$O(n^2)$有30分,但貌似比正解更难想……(其实正解挺好想的) 注意到一次操作实际上就是 ...

  7. vivo输入法 需求分析

    我使用的输入法:vivo输入法 1,用户界面:界面为白色和灰色,整体简洁大方,个人而言外观挺不错.但是不能自定义界面,更改背景图片或是主题. 2,记住用户选择:可记忆上次使用后的键盘方式(26键或是9 ...

  8. promise的原理

    promise的原理 一旦状态改变,就不会再变,任何时候都可以得到这个结果.Promise 对象的状态改变,只有两种可能:从 pending 变为 fulfilled 和从 pending 变为 re ...

  9. poj2492--A Bug&#39;s Life(并查集变形)

    A Bug's Life Time Limit: 10000MS   Memory Limit: 65536K Total Submissions: 28703   Accepted: 9350 De ...

  10. 夜&#183; 启程

    有写博客的念头,还是在去年的时候. 那天早上我非常兴奋,也非常忐忑.由于我立即要去JD面试.JD大家都知道的,对我这样的没见过世面的人来说.这就是个高高在上殿堂. 结果我的满腔热血.被一张面试题卷给浇 ...