码迷,mamicode.com
首页 > 其他好文 > 详细

POJ 1703 Find them, Catch them

时间:2016-04-04 19:41:37      阅读:114      评论:0      收藏:0      [点我收藏+]

标签:

并查集。

一个人拆成两个点,如果告知a和b不在一个中,那么把a,b+n并到一个集合中,把a+n,b也并到一个集合中。

询问的时候,如果a和b在一个集合中,输出在一个集合中

如果a和b+n在一个集合中,输出不在一个集合中

剩下的情况输出不确定。

#include<cstdio>
#include<cstring>
#include<cmath>
#include<queue>
#include<vector>
#include<algorithm>
using namespace std;
typedef long long LL;

const int maxn=100000+10;
int f[2*maxn];
int T,n,m;

int Find(int x)
{
    if(x!=f[x]) return f[x]=Find(f[x]);
    return f[x];
}

int main()
{
    scanf("%d",&T);
    while(T--)
    {
        scanf("%d%d",&n,&m);
        for(int i=1;i<=2*n;i++) f[i]=i;
        for(int i=1;i<=m;i++)
        {
            char op[5]; scanf("%s",op);
            int a,b; scanf("%d%d",&a,&b);

            if(op[0]==A)
            {
                int fa=Find(a),fb=Find(b),fc=Find(b+n);
                if(fa==fb)  printf("In the same gang.\n");
                else if(fa==fc) printf("In different gangs.\n");
                else printf("Not sure yet.\n");
            }

            else
            {
                int fa=Find(a),fb=Find(b+n);
                int fc=Find(a+n),fd=Find(b);
                if(fa!=fb) f[fa]=fb,f[fd]=fc;
            }
        }
    }
    return 0;
}

 

POJ 1703 Find them, Catch them

标签:

原文地址:http://www.cnblogs.com/zufezzt/p/5352605.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!