题目链接: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. JS面向对像编程四—— prototype 对象

    http://blog.csdn.net/fanwenjieok/article/details/54575560 大部分面向对象的编程语言,都是以“类”(class)作为对象体系的语法基础.Java ...

  2. ZBrush中Magnify膨胀笔刷介绍

    Magnify膨胀笔刷是ZBrush®笔刷中经常使用的,利用该笔刷可绘制中心向四周膨胀的效果.本文内容向大家介绍ZBrush®中膨胀笔刷以便大家熟悉它的用法和特性. Magnify膨胀笔刷 Magni ...

  3. 基于cxf的webService服务发布及客户端开发

    学习地址: http://www.cnblogs.com/leihenqianshang/category/795140.html

  4. SyntaxError Generator expression must be parenthesized

    环境: Windows10 python3.7.0 Django1.11.15 异常 启动Django时抛出以下异常: Unhandled exception in thread started by ...

  5. 如何打印枚举类型:%d

    #include <stdio.h> typedef enum SessionState { SESSION_OPENING, /* Session scope is being crea ...

  6. linux yum安装找不到源

    1先说问题: 服务器装麒麟系统后安装gis地图(其实就是部署一套地图服务),因为是内网,所以所有需要的包都放在一个iso文件中了,需要用mount命令去加载之,然后配置*.repo文件(源文件配置), ...

  7. u-boot for tiny210 ver1.0(by liukun321咕唧咕唧)

     新版本下载: 下面的链接提供了较新版本的源码 ver4.0源码下载:u-boot for tiny210 ver4.0 ver3.1源码下载: u-boot for tiny210 ver3.1 v ...

  8. Django Rest Framework 简介及 初步使用

    使用Django Rest Framework之前我们要先知道,它是什么,能干什么用? Django Rest Framework 是一个强大且灵活的工具包,用以构建Web API 为什么要使用Res ...

  9. js基础——事件绑定(事件监听)

    JavaScript事件一共有三种监听方法分别如下: 1.事件监听一夹杂在html标签内 <div id="box" onClick="alert('HELLO W ...

  10. C/C++ 浮点数比较问题

    本系列文章由 @YhL_Leo 出品,转载请注明出处. 文章链接: http://blog.csdn.net/yhl_leo/article/details/50255623 Never try to ...