POJ1703 并查集
2017-03-03 23:11
197 查看
POJ1703
题目大意:警察抓获N个罪犯,这些罪犯只可能属于两个团伙中的一个,现在给出M个条件(D a b表示a和b不在同一团伙),对于每一个询问(A a b)确定a,b是不是属于同一团伙或者不能确定。
这道题我用了两个并查集,把每个罪犯复制出两个来。一个是原来的,一个对称后的,以判断a b的相对团伙。
同一个集合表示可以有一个罪犯所述团伙推出其他罪犯所属团伙,用于判断是否能确定。
出于本人奇怪的性格,数据不上50万都懒得用Rank合并==
代码:
/* Time:329ms memory:944K */ include<cstdio> #include<cstring> using namespace std; #define N 200010 int t,n,m,a,b,fa ; int root(int x){ return fa[x]?fa[x]=root(fa[x]):x; } inline bool alk(int x,int y){ return root(x)==root(y); } inline void unite(int x,int y){ x=root(x); y=root(y); if(x!=y) fa[x]=y; } int main(){ scanf("%d",&t); while(t--){ memset(fa,0,sizeof(fa)); scanf("%d%d%*c",&n,&m); while(m--){ char c=getchar(); scanf("%d%d%*c",&a,&b); if(c=='D'){ unite(a,b+n); unite(a+n,b); } else puts(alk(a,b)?"In the same gang.":alk(a,b+n)?"In different gangs.":"Not sure yet."); } } }
相关文章推荐
- POJ 1703 Find them, Catch them[并查集]
- Find them, Catch them - POJ 1703 种类并查集
- 【POJ 1703 Find them, Catch them】并查集
- POJ 1703 Find them, Catch them(种类并查集)
- poj 1703 Find them, Catch them(并查集)
- poj 1703 并查集解决分组问题
- POJ 1703 并查集
- (用树结构支持并查集8.2.2)POJ 1703 Find them, Catch them(并查集的简单使用: 判断两个元素是否属于同一集合)
- POJ 1703 Find them, Catch them 利用并查集的长度关系(我现在不敢说是不是距离了)
- POJ - 1703 Find them, Catch them(带权并查集)
- POJ 1703 并查集
- 《挑战程序设计竞赛》2.4.2 数据结构-并查集 POJ1182 2236 1703 AOJ2170
- poj 1703 Find them, Catch them(并查集)
- POJ1703 Find them, Catch them 并查集
- poj-1703(并查集) Parity game
- POJ 2236 Wireless Network ||POJ 1703 Find them, Catch them 并查集
- POJ 1703:Find them, Catch them(带权的并查集)
- poj--1703--Find them, Catch them(并查集巧用)
- POJ 1703 - Find them, Catch them(种类并查集)
- POJ 1703 Find them, Catch them(关系并查集)