poj 1703 并查集
2015-05-04 21:35
183 查看
题意:在这个城市里有两个黑帮团伙,现在给出N个人,问任意两个人他们是否在同一个团伙
输入D x y代表x于y不在一个团伙里
输入A x y要输出x与y是否在同一团伙或者不确定他们在同一个团伙里
链接:点我
输入D x y代表x于y不在一个团伙里
输入A x y要输出x与y是否在同一团伙或者不确定他们在同一个团伙里
链接:点我
#include <stdio.h> #include <algorithm> #include <iostream> #include <string.h> using namespace std; const int MAXN=100010; int F[MAXN]; int val[MAXN]; int find(int x) { if(F[x]==-1)return x; int tmp=find(F[x]); val[x]=(val[x]+val[F[x]])%2; return F[x]=tmp; } void bing(int x,int y) { int t1=find(x); int t2=find(y); if(t1!=t2) { F[t1]=t2; val[t1]=(val[y]-val[x]+1)%2; } } int main() { int T; char str[10]; int u,v; int n,m; scanf("%d",&T); while(T--) { scanf("%d%d",&n,&m); memset(F,-1,sizeof(F)); memset(val,0,sizeof(val)); while(m--) { scanf("%s%d%d",&str,&u,&v); if(str[0]=='A') { if(find(u)!=find(v)) {//题目说两个集团至少有一个人,所以N==2的时候单独考虑,但是不考虑这个也可以AC,估计没有这样的数据 if(n==2)printf("In different ganges.\n"); else printf("Not sure yet.\n"); } else { if(val[u]!=val[v])printf("In different gangs.\n"); else printf("In the same gang.\n"); } } else { bing(u,v); } } } return 0; }
相关文章推荐
- 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(数据结构-并查集)
- POJ 1703 Find them, Catch them (并查集)
- POJ 1703 种类并查集
- POJ 1703 Find them, Catch them [数据结构-并查集 union-find sets]
- poj 1703 Find them, Catch them 【并查集 新写法的思路】
- poj 1703 Find them, Catch them(种类并查集和一种巧妙的方法)
- 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 并查集的应用 关系并查集l两种方法
- POJ 1703 Find them, Catch them 种类并查集
- 并查集之关系分类 POJ - 1703 Find them, Catch them
- poj 1703 并查集
- POJ 1703 Find them, Catch them 种类并查集(入门)