您的位置:首页
HLJU 1042 Fight (种类并查集)
2017-08-07 18:03
543 查看
1042: Fight
Time Limit: 1 Sec Memory Limit:128 MB
Submit: 26 Solved: 8
[Submit][Status][Web
Board]
Description
尽管格斗是很须要技术的一项运动。可是打群架却不须要什么技术,并且场面一般比較混乱,分不清谁和谁是一伙的,仅仅能看出谁和谁不是一伙的,并且打群架常常会出现猪一样的队友。误伤自己人。如今给你一些信息,请你根据这些信息推断是否一定存在猪一样的队友。
Input
包括多组測试例子。第一行输入两个数N(1<N<10000),M(1<M<1000000). N表示參与打架的人数,M表示M次攻击。
接下来M行输入两个整数a, b (1<=a, b<=N),表示a攻击了b。
Output
若一定存在猪一样的队友输出YES, 否则输出NO。每一个输出占一行。Sample Input
3 3 1 2 2 3 1 3 4 2 1 2 3 4
Sample Output
YES NO
HINT
a攻击b且b攻击c 则可判断 a,c同伙,若a攻击c则有矛盾,即必定存在误伤。Source
tyh解析:參见ACdream 1056 Bad Horse (种类并查集)
AC代码:
#include <bits/stdc++.h> using namespace std; const int maxn = 10005; int f[2 * maxn + 2]; int Find(int x){ return x == f[x] ? x : f[x] = Find(f[x]); } void unin(int x, int y){ x = Find(x); y = Find(y); if(x != y) f[x] = y; } int main(){ #ifdef sxk freopen("in.txt", "r", stdin); #endif // sxk int n, m, a, b; while(~scanf("%d%d", &n, &m)){ for(int i=1; i<=2 * maxn; i++) f[i] = i; int flag = 0; for(int i=0; i<m; i++){ scanf("%d%d", &a, &b); if(Find(a) == Find(b) || Find(a + maxn) == Find(b + maxn)) flag = 1; else{ unin(a, b + maxn); unin(a + maxn, b); } } puts(flag ? "YES" : "NO"); } return 0; }
相关文章推荐
- HLJU 1042 Fight (种类并查集)
- poj1703(种类并查集)
- hdu1829——A Bug's Life 种类、带权并查集 裸题
- 食物链------种类并查集
- HDU 1829 && POJ 2492 A Bug's Life(种类并查集)
- hdu 1829 A Bug's Life (种类并查集)
- poj 1182 食物链(经典!种类并查集)
- poj 1182 食物链(经典种类并查集)
- HLJU 1105 cpc 喵喵的拆分集合 (并查集的逆向操作)
- [poj1703]Find them, Catch them(种类并查集)
- POJ 1703 - Find them, Catch them(种类并查集)
- Mahmoud and a Dictionary CodeForces - 766D 种类并查集
- HDU3038【种类并查集】
- HDU 1829 A Bug's Life(种类并查集)
- A Bug's Life(种类并查集)(也是可以用dfs做)
- poj 食物链(种类并查集)(思路)
- hdu 3038(How Many Answers Are Wrong)+3047(Zjnu Stadium)(种类并查集)
- PAT L2-010. 排座位 疑似种类并查集
- Find them, Catch them - POJ 1703 种类并查集
- POJ - 1984 Navigation Nightmare 种类并查集