您的位置:首页 > 其它

poj1703(种类并查集)

2014-07-24 08:40 323 查看
题目大意:

输入:第一行测试数目T;

第二行N,M;N个罪犯M个输入;

第3~m+2行,A表示询问,a,b是否同一种类;D,表示a,b不同种类;

种类并查集:

分为1~N,N~2N两类;

a,b第一次出现时是s[a]=a,s[b]=b,

#include<cstdio>
#include<cstring>

#define  MAXN 200100

int n,m,s[MAXN];

int Find(int x)
{
if(s[x]<0)  return x;
return  s[x]=Find(s[x]);
}

int main()
{
int Case;
scanf("%d",&Case);
while(Case--)
{
memset(s,-1,sizeof(s));
scanf("%d%d",&n,&m);
while(m--)
{
char str;
int   a,b;
scanf(" %c %d %d",&str,&a,&b);
if(str=='A')
{
if(Find(a)!=Find(b)&&Find(a)!=Find(b+n))   puts("Not sure yet.");
else if(Find(a)==Find(b))  puts("In the same gang.");
else puts("In different gangs.");
}
else
{
if(Find(a)!=Find(b+n))
{
s[Find(a)]=Find(b+n);
s[Find(b)]=Find(a+n);
}
}
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: