Codeforces Round #396 (Div. 2)-D. Mahmoud and a Dictionary(关系并查集)
2017-02-08 16:48
513 查看
记录一个菜逼的成长。。
题目链接
题目大意:
n个单词,m个关系,q次查询
有两种关系:
1 a b表示a,b两个单词同义
2 a b表示a,b两个单词反义
如果关系跟之前的关系冲突则无视当前关系
每次查询问两个单词属于1还是2,都不属于则输出3
一看就发现跟poj1703和poj1182两道关系并查集很像,,可以说是结合后的题。
这里我把关系1,2变成0,1刚好是%2后的数
PS:为什么我发现cf的D题总是比C题要好做。。orz.
题目链接
题目大意:
n个单词,m个关系,q次查询
有两种关系:
1 a b表示a,b两个单词同义
2 a b表示a,b两个单词反义
如果关系跟之前的关系冲突则无视当前关系
每次查询问两个单词属于1还是2,都不属于则输出3
一看就发现跟poj1703和poj1182两道关系并查集很像,,可以说是结合后的题。
这里我把关系1,2变成0,1刚好是%2后的数
PS:为什么我发现cf的D题总是比C题要好做。。orz.
#include <cstdio> #include <iostream> #include <cstring> #include <string> #include <algorithm> #include <map> using namespace std; #define cl(a,b) memset(a,b,sizeof(a)) #define clr clear() map<string ,int>ma; char a[25],b[25]; const int maxn = 100000 + 10; int pre[maxn],rel[maxn]; void init() { for(int i = 1; i < maxn; i++ ){ pre[i] = i;rel[i] = 0; } } int findr(int x) { if(pre[x] == x)return pre[x]; int fx = findr(pre[x]); rel[x] = (rel[pre[x]] + rel[x]) % 2; return pre[x] = fx; } int unio(int type,int x,int y) { int fx = findr(x),fy = findr(y); if(fx == fy){ if((rel[y] - rel[x] + 2) % 2 != type-1)return 1; else return 0; } pre[fy] = fx; rel[fy] = (rel[x] - rel[y] + type-1 + 2) % 2; return 0; } int main() { int n,m,q; while(~scanf("%d%d%d",&n,&m,&q)){ ma.clr; init(); int num = 1; for( int i = 0; i < n; i++ ){ scanf("%s",a); ma[a] = num++; } while(m--){ int ope; scanf("%d%s%s",&ope,a,b); int ret = unio(ope,ma[a],ma[b]); if(ret)puts("NO"); else puts("YES"); } while(q--){ scanf("%s%s",a,b); int fa = findr(ma[a]),fb = findr(ma[b]); if(fa == fb){ if((rel[ma[a]] + rel[ma[b]]) % 2 == 0)puts("1"); else puts("2"); } else puts("3"); } } return 0; }
相关文章推荐
- C#数据结构之顺序表(SeqList)实例详解
- Lua教程(七):数据结构详解
- 解析从源码分析常见的基于Array的数据结构动态扩容机制的详解
- C#数据结构之队列(Quene)实例详解
- C#数据结构揭秘一
- C#数据结构之单链表(LinkList)实例详解
- 数据结构之Treap详解
- C++数据结构之实现循环顺序队列
- 用C语言举例讲解数据结构中的算法复杂度结与顺序表
- C#数据结构之堆栈(Stack)实例详解
- C#数据结构之双向链表(DbLinkList)实例详解
- JavaScript数据结构和算法之图和图算法
- js处理层级数据结构的方法小结
- Java数据结构及算法实例:冒泡排序 Bubble Sort
- Java数据结构及算法实例:插入排序 Insertion Sort
- Java数据结构及算法实例:考拉兹猜想 Collatz Conjecture
- java数据结构之java实现栈
- java数据结构之实现双向链表的示例
- Java数据结构及算法实例:选择排序 Selection Sort
- Java数据结构及算法实例:朴素字符匹配 Brute Force