POJ 1703 Find them, Catch them【并查集】
2012-08-07 15:40
239 查看
题意: 有 N 个人分属于两个帮派,对应两种操作:
A X Y 询问x,y 是否属于一个帮派,或两者关系不能确定。
D X Y X和Y 分属不同帮派
分析: 感觉就是简化版的食物链...
方法一:
加一个数组 r[i]
r[i] = 0 表示 i 与祖先属于同一个帮派
r[i] = 1 表示 i 与祖先属于不同帮派
View Code
A X Y 询问x,y 是否属于一个帮派,或两者关系不能确定。
D X Y X和Y 分属不同帮派
分析: 感觉就是简化版的食物链...
方法一:
加一个数组 r[i]
r[i] = 0 表示 i 与祖先属于同一个帮派
r[i] = 1 表示 i 与祖先属于不同帮派
View Code
#include<stdio.h> #include<string.h> int f[200005]; int find(int x) { return f[x]==x?x:(f[x]=find(f[x])); } void join(int x,int y) { int fx=find(x); int fy=find(y); if(fx!=fy) f[fy]=fx; } int main() { char s[2]; int t,n,m,a,b,fx,fy,i; scanf("%d",&t); while(t--) { scanf("%d%d",&n,&m); for(i=1;i<=2*n;i++) f[i]=i; while(m--) { scanf("%s%d%d",s,&a,&b); if(s[0]=='A') { if(find(a+n)==find(b)) printf("In different gangs.\n"); else if(find(a)==find(b)) printf("In the same gang.\n"); else printf("Not sure yet.\n"); } else { join(a,b+n); join(b,a+n); } } } return 0; }
相关文章推荐
- 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(并查集)
- 并查集变式 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(种类并查集)
- poj 并查集 - 1703 Find them, Catch them
- POJ 1703 Find them, Catch them 种类并查集
- poj 1703 Find them, Catch them 并查集
- poj1703--Find them, Catch them(并查集应用)
- POJ - 1703 Find them, Catch them (并查集2)
- 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(经典并查集)