poj1703(种类并查集)

来源:互联网 发布:明星服装店淘宝店 编辑:程序博客网 时间:2024/05/21 06:29

题目大意:

                  输入:第一行测试数目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 200100int 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);                }            }        }    }}


0 0