CodeForces-766D Mahmoud and a Dictionary 并查集 维护同类不同类元素集合
题目链接: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 并查集 维护同类不同类元素集合的更多相关文章
- Codeforces 766D. Mahmoud and a Dictionary 并查集 二元敌对关系 点拆分
D. Mahmoud and a Dictionary time limit per test:4 seconds memory limit per test:256 megabytes input: ...
- 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 ...
- [Codeforces 1027 F] Session in BSU [并查集维护二分图匹配问题]
题面 传送门 思路 真是一道神奇的题目呢 题目本身可以转化为二分图匹配问题,要求右半部分选择的点的最大编号最小的一组完美匹配 注意到这里左边半部分有一个性质:每个点恰好连出两条边到右半部分 那么我们可 ...
- 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 ...
- CodeForces 766D Mahmoud and a Dictionary
并查集. 将每一个物品拆成两个,两个意义相反,然后并查集即可. #pragma comment(linker, "/STACK:1024000000,1024000000") #i ...
- Codeforces.1051G.Distinctification(线段树合并 并查集)
题目链接 \(Description\) 给定\(n\)个数对\(A_i,B_i\).你可以进行任意次以下两种操作: 选择一个位置\(i\),令\(A_i=A_i+1\),花费\(B_i\).必须存在 ...
- Codeforces.1027F.Session in BSU(思路 并查集)
题目链接 \(Description\) 有\(n\)个人都要参加考试,每个人可以在\(ai\)或\(bi\)天考试,同一天不能有两个人考试.求最晚考试的人的时间最早能是多少.无解输出-1. \(So ...
- hihoCoder #1291 : Building in Sandbox 逆向处理+并查集维护
/** 题目:#1291 : Building in Sandbox 链接:https://hihocoder.com/problemset/problem/1291 题意:就是一个三维的空间里,按照 ...
- Codeforces325 D【并查集维护连通性】
参考:大牛blog 思路: 因为是环,所以可以复制一下图,先判断一下和他是不是和与他相邻的8个之一的一个障碍使得构成了一个环,环就是一个连通,用并查集维护即可: 如果没有就ans++,然后并把这个点加 ...
随机推荐
- 浏览器渲染HTML页面步骤
渲染步骤:浏览器渲染页面时,表示网站资源已经请求成功(要了解查看:浏览器向服务器请求资源过程) 解析HTML以构建dom树--->构建render树--->布局render树---> ...
- springboot中文文档
http://blog.geekidentity.com/spring/spring_boot_translation/ https://blog.csdn.net/zfrong/article/de ...
- css——应用多个样式
应用多个样式 在class中使用多个样式 在这是会有优先级关系问题 在上面的代码中,aa,bb,中的颜色会有冲突,到底显示的结果会是黄色还是绿色呢? 结果是绿色的.它是以程序执行的先后为优先级,后执行 ...
- Java String 字符串截取和获取文件的上级目录
public String test() { String root = ServletActionContext.getServletContext().getRealPath("/&qu ...
- java中的instanceof用法
Java 中的instanceof 运算符是用来在运行时指出对象是否是特定类的一个实例.instanceof通过返回一个布尔值来指出,这个对象是否是这个特定类或者是它的子类的一个实例. 用法: ...
- NYIST 677 碟战
碟战时间限制:2000 ms | 内存限制:65535 KB难度:4 描述知己知彼,百战不殆!在战争中如果被敌人掌握了自己的机密,失败是必然的.K国在一场战争中屡屡失败,就想到自己的某些城市可能会有敌 ...
- iipccsxxtnsoiq
gxspvyheuetwqgnbwmwd
- 多本Web前端深度修炼书籍(提供网盘下载链接)
书籍介绍:这本书涵盖了html5新增标签和功能,而且提供了jquerymobile,Phonegap,Sencha Touch框架的介绍和应用,最后还带了一个移动web应用的样例,绝对是移动web开发 ...
- 【Linux】进程调度概述
1 可运行队列 (基于实时进程调度) 调度程序中最主要的数据结构式运行队列(runqueue).可运行队列是给定处理器上的可运行进程的链表,每一个处理器一个. 每一个可投入运行的进程都唯一的归属于一个 ...
- 浅析Java抽象类和接口的比較
abstract class和interface是Java语言中对于抽象类定义进行支持的两种机制,正是因为这两种机制的存在,才赋予了Java强大的面向对象能力. abstract class和inte ...