UESTC 1586 可以说是非常豹笑了 2-SAT+并查集
来源:互联网 发布:淘宝店铺动态怎么写 编辑:程序博客网 时间:2024/05/16 01:42
可以说是非常豹笑了
Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others)Submit Status
title
你总是说:“可以说是非常豹笑了”
可是非常豹已经很累了,
非常豹不想笑,
它想念自己的家人,
而不是被你逼着笑。
你关心过这些吗?
没有!你只关心你自己。
Input
第一行输入一个正整数N(2<=N<=1000000)表示总天数,一个正整数M(1<=M<=1000000)表示给出的关系数。接下来M行,每行三个整数T(T=1 or 0)、A、B(1<=A,B<=N)。T=1表示在第A天和第B天非常豹的表情一样、T=0表示在第A天和第B天非常豹的表情不一样。
非常豹在一天里要么笑了,要么没笑。
Output
输出 'YES’ 如果输入是可能的话;输出'NO' 如果无论怎样都不可能满足输入给出的关系。
Sample input and output
Sample Input Sample Output2 2
1 1 2
0 2 1
NO
2 2
1 1 1
0 2 1
YES
Hint
没有多组数据Source
2017 UESTC Training for Data StructuresUESTC 1586 可以说是非常豹笑了
My Solution
题意:n个数,m个关系,每个关系表示T==1则a、b两数相同,T == 0则a、b两数不同。
要求判断关系是否没有矛盾。
2-SAT+并查集
有一个大小为2*n的并查集,
如果a、b天相同,则把a和b,以及a+n和b+n,合并,
如果a、b天不同,则把a和b+n,以及a+n和b,合并,
然后i= 1 ~ n,扫一遍,如果 a和a+n在同一颗树中,则相矛盾,
因为不可能那天表情即一样又不一样,答案为NO,
反正为 YES
复杂度 O(2*n)
#include <iostream>#include <cstdio>using namespace std;typedef long long LL;const int MAXN = 1e6 + 8;int father[2*MAXN], _rank[2*MAXN];inline void init(int n){ for(int i = 0; i <= n; i++){ father[i] = i; _rank[i] = 0; }}inline int _find(int x){ return father[x] = father[x] == x ? x : _find(father[x]);}inline void _merge(int x, int y){ int a = _find(x), b = _find(y); if(a == b) return; else{ if(_rank[a] < _rank[b]){ father[a] = b; } else{ father[b] = a; if(_rank[a] == _rank[b]){ _rank[a]++; } } }}int main(){ #ifdef LOCAL freopen("n.txt", "r", stdin); //freopen("n.out", "w", stdout); int T = 2; while(T--){ #endif // LOCAL //ios::sync_with_stdio(false); cin.tie(0); int n, m, i, j, t, x, y; scanf("%d%d", &n, &m); init(2*n); for(i = 1; i <= m; i++){ scanf("%d%d%d", &t, &x, &y); if(t){ _merge(x, y); _merge(x + n, y + n); } else{ _merge(x, y + n); _merge(x + n, y); } } bool ans = true; for(i = 1; i <= n; i++){ if(_find(i) == _find(i + n)){ ans = false; break; } } if(ans) puts("YES"); else puts("NO"); #ifdef LOCAL cout << endl; } #endif // LOCAL return 0;}
Thank you!
------from ProLights
阅读全文
0 0
- UESTC 1586 可以说是非常豹笑了 2-SAT+并查集
- hdu 4421 && zoj 3656 Bit Magic 2-sat题找规律水过 也可以用并查集
- UESTC ACM 1529 并查集+贪心
- 可以说是一位非常优秀的工人
- UESTC OJ 1832 带权并查集+路径压缩
- 装修真可以说是非常劳心劳力的事情
- 并查集的一道题目;发现可以用并查集就简单了;
- List之Union(),Intersect(),Except() 亦可以说是数学中的并集,交集,差集
- List之Union(),Intersect(),Except() 亦可以说是数学中的并集,交集,差集
- [poj 3207] Ikki\'s Story IV - Panda\'s Trick(2-sat or 并查集)
- 【BZOJ4078】[Wf2014]Metal Processing Plant【2-SAT】【二分】【二分图】【并查集】
- bzoj 1997 Planar [并查集] [二分图判定] [2-SAT]
- HDU 1856 More is better (裸的并查集,记录下秩就可以了)
- 可以说是我第一次写的汇编程序了
- log的用法(可以说是淋漓尽致了)
- 可以说是比较浅显易懂的区块链解释了
- RxJava图文详解,可以说是很全了。
- 并查集详解——非常生动!(转载)
- EventBus:Could not dispatch event: class to subscribing class
- Machine Learning第九讲[异常检测] --(二)创建一个异常检测系统
- ContentProvider获取手机联系人
- Java中的DatagramPacket与DatagramSocket的初步
- bzoj 2631 tree
- UESTC 1586 可以说是非常豹笑了 2-SAT+并查集
- Acach缓存的实现
- BM、GC、SGBM三种算法的比较和BM在OpenCV3下的参数设置
- 一些长期更新的小东西,容易忘记的
- 集合和数组的相互转换
- 链路聚合
- LeetCode专辑]【1-5题】
- php导出excel出现的问题
- Android--自定义控件(图片轮播)