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

POJ 1703 Find them, Catch them

时间:2014-09-19 15:27:05      阅读:182      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   io   os   ar   for   div   

题目链接:http://poj.org/problem?id=1703

 

思路:种类并查集。 并设置一个opp数组,opp[i]代表与i相对立的。

 

代码:

  

 

#include <iostream>
#include <cstdio>
using namespace std;
int c,d;
int t1,t2;
int opp[100005];
int f[100005];

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

void merge(int x,int y)
{
    int a = getf(x);
    int b = getf(y);
    
    if(a!=b)
    {
        f[b] = a;
    }
}

void init()
{
    for(int i=1;i<=t1;i++)
    {
        f[i] = i;
        opp[i] = 0;
    }
}


int main()
{
    int n;
    scanf("%d",&n);
    getchar();
    
    char str[10];
    
    while(n--)
    {
        scanf("%d %d",&t1,&t2);
        getchar();
        init();
        
        for(int i=1;i<=t2;i++)
        {
            scanf("%s %d %d",str,&c,&d);
            getchar();
            if(str[0]==D)
            {
                if(opp[c]==0&&opp[d]==0)
                {
                    opp[c] = d;
                    opp[d] = c;
                }
                else if(opp[c]==0)
                {
                    opp[c] = d;
                    merge(opp[d],c);
                }
                else if(opp[d]==0)
                {
                    opp[d] = c;
                    merge(opp[c],d);
                    
                }
                else
                {
                    merge(opp[c],d);
                    merge(opp[d],c);
                }
            }    
            else
            {
                if(t1==2)
                {
                        printf("In different gangs.\n");
                        continue;
                }

                int temp1 = getf(c);
                int temp2 = getf(d);
                if(temp1==temp2)
                {
                    printf("In the same gang.\n");
                }
                else if(temp1 == getf(opp[d]))
                {
                    printf("In different gangs.\n");
                }
                else
                {
                    printf("Not sure yet.\n");
                }
            }
        }
    }
    return 0;
}

 

POJ 1703 Find them, Catch them

标签:style   blog   http   color   io   os   ar   for   div   

原文地址:http://www.cnblogs.com/ltwy/p/3981450.html

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