10317 Fans of Footbal Teams(并查集)

Posted 酱油党gsh

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了10317 Fans of Footbal Teams(并查集)相关的知识,希望对你有一定的参考价值。

10317 Fans of Footbal Teams

时间限制:1000MS  内存限制:65535K
提交次数:0 通过次数:0

题型: 编程题   语言: G++;GCC

 

Description

Two famous football teams, named AC Milan(AC米兰) and Inter Milan(国际米兰) will have a match in GuangZhou City, which is 
exciting. So a lot of fans get together to watch the wonderful match. This trouble the local polices. In order to avoid a 
chaos caused by fans of the two teams, the police office in GuangZhou City decides to arrange the seats of the gymnasium(体育馆) 
during the match. All fans of AC Milan seat Noth, while all fans of Inter Milan seat South . However, the police first needs 
to identify which team a fan support. The present question is, given two fans; do they support a same team? You must give 
your judgment based on incomplete information. 

Assume N (N <= 10^5) fans are currently in GuangZhou City, numbered from 1 to N. 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 fans, and they support different teams. 

2. A [a] [b] 
where [a] and [b] are the numbers of two fans. This requires you to decide whether a and b support a same team. 




输入格式

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. 



输出格式

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 "Support the same team.", "Support different teams." and "Not sure yet."



 

输入样例

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



 

输出样例

Not sure yet.
Support different teams.
Support the same team.



 

题意

有两个足球队,场上的人只支持其中一个队。给出命令A或D,再输入数字a和b,若命令是A,则查询a和b是否支持同一个队,若命令是D,则说明a和b支持不同的队

 

题解

我们假设a和a+n站在对立面,那么,当a和b是对立时,a和b+n就是同队的,根据这个关系,我们在合并时,可以合并a和b+n,a+n和b;

然后通过并查集查询,就很容易了。代码如下

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int f[100100];
int find(int x)
{
    int r=x,i=x,t;
    while (r!=f[r]) r=f[r];
    while (f[i]!=r)
    {
        t=f[i];
        f[i]=r;
        i=t;
    }
    return r;
}

void mix(int x,int y)
{
    int fx=find(x),fy=find(y);
    if (fx!=fy) f[fx]=fy;
}
int main()
{
    int T;
    scanf("%d",&T);
    while (T--)
    {
        int n,m;
        scanf("%d%d",&n,&m);
         for (int i=0;i<=2*n;i++)
         f[i]=i;
         char ch[5];
         int a,b;
         for (int i=0;i<m;i++)
         {
             scanf("%s%d%d",ch,&a,&b);
             if (ch[0]==A)
             {
                 if (find(a)==find(b+n))
                 printf("Support different teams.\n");
                 else if (find(a)==find(b))
                 printf("Support the same team.\n");
                 else
                 printf("Not sure yet.\n");
             }
             else if (ch[0]==D)
             {
                 mix(a,b+n);
                 mix(a+n,b);
             }
         }
    }
    return 0;
}

 

 

  

以上是关于10317 Fans of Footbal Teams(并查集)的主要内容,如果未能解决你的问题,请参考以下文章

亚马逊拟斥资15亿美元建航空货运中心 - Amazon to spend $1.49 bln on air cargo hub, fans talk of bigger ambitions - Reu

flower、photo、tea、cup、day、do、idea、love用中文怎么说?

Let's______(have) a cup of tea! -----Good idea!(用动词适当形式填空)

UVA10317- Equating Equations(回溯+剪枝)

easy sports-graphics-footbal怎么用

梦工厂实验室 取石子之fans 博弈