poj 1703 Find them, Catch them

Find them, Catch them

Time Limit: 1000MS   Memory Limit: 10000K
Total Submissions: 46119   Accepted: 14193

Description

The police office in Tadu City decides to say ends to the chaos, as launch actions to root up the TWO gangs in the city, Gang Dragon and Gang Snake. However, the police first needs to identify which gang a criminal belongs to. The present question is, given two criminals; do they belong to a same clan? You must give your judgment based on incomplete information. (Since the gangsters are always acting secretly.)

Assume N (N <= 10^5) criminals are currently in Tadu City, numbered from 1 to N. And of course, at least one of them belongs to Gang Dragon, and the same for Gang Snake. You will be given M (M <= 10^5) messages in sequence, which are in the following two kinds:

1. D [a] [b] 
where [a] and [b] are the numbers of two criminals, and they belong to different gangs.

2. A [a] [b] 
where [a] and [b] are the numbers of two criminals. This requires you to decide whether a and b belong to a same gang.

Input

The first line of the input contains a single integer T (1 <= T <= 20), the number of test cases. Then T cases follow. Each test case begins with a line with two integers N and M, followed by M lines each containing one message as described above.

Output

For each message "A [a] [b]" in each case, your program should give the judgment based on the information got before. The answers might be one of "In the same gang.", "In different gangs." and "Not sure yet."

Sample Input

1
5 5
A 1 2
D 1 2
A 1 2
D 2 4
A 1 4

Sample Output

Not sure yet.
In different gangs.
In the same gang.

Source

POJ Monthly--2004.07.18

/*
* @Author: Lyucheng
* @Date:   2017-07-20 20:33:57
* @Last Modified by:   Lyucheng
* @Last Modified time: 2017-07-20 22:12:50
*/
/*
 题意:有两个帮派,两种操作:
    D x,y x和y是属于两个不同的帮派的
    A x,y 询问x和y的关系

 思路:二分染色问题,按照关系建边,如果x,y不在一个联通分量中的话就不能确定关系,如果在一个连通分量重
    那么直接判断与根节点的距离的奇偶
*/
#include <stdio.h>
#include <string.h>
#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
#include <set>
#include <map>
#include <string>
#include <math.h>
#include <stdlib.h>
#include <time.h>

#define MAXN 100005

using namespace std;

int t;
int n,m;
char str[2];
int x,y;
int bin[MAXN];
int cnt[MAXN];//节点到根结点的距离的奇偶

int findx(int x){
    int cur=x;
    int s=0;
    while(x!=bin[x]){
        if(cnt[x]==1){
            s++;
        }
        x=bin[x];
    }
    bin[cur]=x;
    cnt[cur]=s%2;
    return x;
}

void Union(int x,int y){
    int fx=findx(x);
    int fy=findx(y);
    if(fx!=fy){//不在一个集合内的才合并
        bin[fy]=fx;
        if(cnt[y]==0&&cnt[x]==0)
            cnt[fy]=1;
        else if(cnt[y]==0&&cnt[x]==1)
            cnt[fy]=0;
        else if(cnt[y]==1&&cnt[x]==0)
            cnt[fy]=0;
        else if(cnt[y]==1&&cnt[x]==1)
            cnt[fy]=1;
    }
}

void init(){
    for(int i=0;i<=n;i++){
        bin[i]=i;
    }
    memset(cnt,0,sizeof cnt);
}

int main(){
    // freopen("in.txt", "r", stdin);
    // freopen("out.txt", "w", stdout);
    scanf("%d",&t);
    while(t--){
        scanf("%d%d",&n,&m);
        init();
        for(int i=0;i<m;i++){
            scanf("%s%d%d",str,&x,&y);
            if(str[0]==‘A‘){//询问
                int fx=findx(x);
                int fy=findx(y);
                if(fx!=fy){
                    puts("Not sure yet.");
                }else{
                    if(cnt[x]==cnt[y]){
                        puts("In the same gang.");
                    }else{
                        puts("In different gangs.");
                    }
                }
            }else{//关系
                Union(x,y);
            }
        }
    }
    return 0;
}
时间: 2024-10-07 06:29:31

poj 1703 Find them, Catch them的相关文章

POJ 2236 Wireless Network ||POJ 1703 Find them, Catch them 并查集

POJ 2236 Wireless Network http://poj.org/problem?id=2236 题目大意: 给你N台损坏的电脑坐标,这些电脑只能与不超过距离d的电脑通信,但如果x和y均能C通信,则x和y可以通信.现在给出若干个操作, O p 代表修复编号为p的电脑 S p q代表询问p和q是不是能通信. 思路: 并查集即可.. 如果修复了一台电脑,则把与它相连距离不超过d的且修复了的放在一个集合里面. #include<cstdio> #include<cstring&

POJ 1703 Find them, Catch them(数据结构-并查集)

Find them, Catch them Description The police office in Tadu City decides to say ends to the chaos, as launch actions to root up the TWO gangs in the city, Gang Dragon and Gang Snake. However, the police first needs to identify which gang a criminal b

POJ 1703 Find them, Catch them (数据结构-并查集)

Find them, Catch them Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 31102   Accepted: 9583 Description The police office in Tadu City decides to say ends to the chaos, as launch actions to root up the TWO gangs in the city, Gang Dragon

POJ 1703 - Find them, Catch them(加权并查集) 题解

此文为博主原创题解,转载时请通知博主,并把原文链接放在正文醒目位置. 题目链接:http://poj.org/problem?id=1703 题目大意: N个人分属两个黑帮.给出M条信息.(M,N <= 10^5) D x y表示已知x和y不在同一个黑帮中. A x y表示询问x和y是否在一个黑帮中.如果是,输出In different gangs. 如果不是,输出In the same gang.如果未知,输出Not sure yet. 输入一个数字t表示数据组数(1 <= T <=

poj 1703 Find them, Catch them(种类并查集和一种巧妙的方法)

Find them, Catch them Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 36176   Accepted: 11090 Description The police office in Tadu City decides to say ends to the chaos, as launch actions to root up the TWO gangs in the city, Gang Drago

poj 1703 Find them, Catch them(带权并查集和一种巧妙的方法)

Find them, Catch them Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 36176   Accepted: 11090 Description The police office in Tadu City decides to say ends to the chaos, as launch actions to root up the TWO gangs in the city, Gang Drago

POJ 1703 Find them, Catch them(确定元素归属集合的并查集)

Find them, Catch them Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 52925   Accepted: 16209 Description The police office in Tadu City decides to say ends to the chaos, as launch actions to root up the TWO gangs in the city, Gang Drago

POJ 1703 Find them, catch them (并查集)

题目:Find them,Catch them 刚开始以为是最基本的并查集,无限超时. 这个特殊之处,就是可能有多个集合. 比如输入D 1 2  D 3 4 D 5 6...这就至少有3个集合了.并且任意2个集合之间成员的敌我关系不明. 这里每个集合里面的成员关系要记录,他们在一个集合里,只是因为他们关系明确,敌人或者朋友. 千万不要简单的认为成朋友在一个集合,敌人在另外一个集合,分成2个集合.因为题目说只有2个匪帮,很容易进入这个误区. 我们只要记录一个成员和自己父亲的敌我关系和建树就可以了.

POJ 1703 Find them, Catch them(带权并查集)

传送门 Find them, Catch them Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 42463   Accepted: 13065 Description The police office in Tadu City decides to say ends to the chaos, as launch actions to root up the TWO gangs in the city, Gang D