hdu 1829 A Bug's Life (基础并查集)

题目:

链接:点击打开链接

题意:

给定虫子的交配关系,确定实验是否支持教授的假设即没有同性恋或者不符合假设。

思路:

是一道基础的并查集题目。存在两个集合异性和同性,给出多组关系,看这两个集合有木有联系,即是否有同性恋。

定义一个数组sex[],sex[i]表示与编号i的性别相反的虫子编号。然后将和i虫子有联系的合并为同一个集合(认为是同性的)。如果findset(u) == findset(v),出现了反常行为。

代码:

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
#define MAXN 2020

int n,m;
int root[MAXN];
int sex[MAXN];

int findset(int x)
{
    return root[x] == x ? x : root[x] = findset(root[x]);
}

void mergeset(int x,int y)
{
    int fx = findset(x);
    int fy = findset(y);
    if(fx != fy)
    {
        if(fx > fy)
            root[fy] = fx;
        else
            root[fx] = fy;
    }
}

void init()
{
    for(int i=0; i<=n; i++)
    {
        root[i] = i;
        sex[i] = 0;
    }
}

int main()
{
    //freopen("input.txt","r",stdin);
    int t;
    int kase = 0;
    int flag;
    int u,v;
    cin>>t;
    while(t--)
    {
        flag = 1;
        scanf("%d%d",&n,&m);
        init();
        for(int i=0; i<m; i++)
        {
            scanf("%d%d",&u,&v);
            if(findset(u) == findset(v))
                flag = 0;
            else
            {
                if(sex[u] == 0)
                    sex[u] = v;
                else
                    mergeset(sex[u],v);//合并有行为关系的虫子
                if(sex[v] == 0)
                    sex[v] = u;
                else
                    mergeset(sex[v],u);
            }
        }
        printf("Scenario #%d:\n",++kase);
        if(flag)
            printf("No suspicious bugs found!\n\n");
        else
            printf("Suspicious bugs found!\n\n");
    }
    return 0;
}

---------------------------------------------------------------------------

战斗,毫不退缩;奋斗,永不停歇~~~~~~~~~~~~~~~~

hdu 1829 A Bug's Life (基础并查集),布布扣,bubuko.com

hdu 1829 A Bug's Life (基础并查集)

时间: 2024-10-01 16:58:24

hdu 1829 A Bug's Life (基础并查集)的相关文章

HDU 1829 A Bug&#39;s Life (并查集)

题目链接:请戳这里. 题目大意及思路:给定n个Bugs(shen me gui)和m对Bugs之间的关系,假定关系是两个Bugs的男女关系,那么问存不存在同性恋的情况. 那么若a与b是男女关系,b与c是男女关系,那么a和c的性别我们就可以认为是相同的.我们用可以建立两个并查集,一类放男男关系,一类放女女关系. 那么若男男关系中出现了环的情况(即有共同的根),那么同性恋关系就出现了. #include<iostream> #include<cstdio> #include<cs

hdoj 1829 A bug&#39;s life 种类并查集

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1829 并查集的一个应用,就是检测是否存在矛盾,就是两个不该相交的集合有了交集.本题就是这样,一种虫子有两种性别,每次m次操作,每次给出(a,b),如果a和b是同性别就出现了错误,也就是说出现了判断它有两种性别的错误.我的策略同样是两个集合,用并查集维护两个集合之间的关系.具体证明请看我的上一篇博客,关于这种做法的正确性的证明. 代码如下: 1 #include<bits/stdc++.h> 2 t

【转】POJ 2492 A Bug&#39;s Life:基础并查集进阶

思路参考这里(较详细) 一开始总是WA调了一晚上原来···Init初始化写在scanf上面了···哎╮(╯▽╰)╭anyway!对并查集的理解更深了一步! #include<cstdio> #include<cstring> using namespace std; #define Size 2000 struct node { int Pre; int Relation;// 与父节点的关系 0同性 1异性 }Bug[Size+1]; int N, M; bool found;

hdu 1829 A Bug&#39;s Life (基础种类并查集)

先说说种类并查集吧. 种类并查集是并查集的一种.但是,种类并查集中的数据是分若干类的.具体属于哪一类,有多少类,都要视具体情况而定.当然属于哪一类,要再开一个数组来储存.所以,种类并查集一般有两个数组,一个存并查集内的父子关系,一个存各个节点所属的种类关系. 以这道题为例(题意在后面,如果没有读题,可以先看完题在来看这部分)—— 这道题很明显,将bug分成两类,一公一母.但是实际上我们并不关心它是公的还是母的,只关心它们之间是同性还是异性.所以,我们可以设与并查集的根节点同性的为0,反之为1.所

hdu 1829 A Bug&#39;s Life(分组并查集(偏移量))

A Bug's Life Time Limit: 15000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 9204    Accepted Submission(s): 2961 Problem Description Background Professor Hopper is researching the sexual behavior of a rare sp

Hdu 1829 A Bug&#39;s Life

Problem地址:http://acm.hdu.edu.cn/showproblem.php?pid=1829 看完这题,我想到了用并查集. 我用gender[]表示相应编号的小虫的性别--boy / girl 对每只输入的小虫预设性别 如输入 1 2 3 4 ( 图中B代表boy,G代表girl ) 继续输入 1 3时,会发现1 3性别相同,但此时还不能判断错误,因为如果将右边这棵树的所有虫子性别更改后及又可满足条件 然后将两树合并 之后怎么判断题中推论是否正确呢? 可以这样:当输入的数据在

hdu 1829 A Bug&#39;s Life 并查集系列

1 #include "cstdio" 2 #include "iostream" 3 #include "cstring" 4 #include "vector" 5 #include "queue" 6 using namespace std; 7 8 #define MAXN 2222 9 int fa[MAXN]; 10 int rnk[MAXN]; //秩 表示某点与根的距离 11 int n,

HDU 1829 &amp;&amp; POJ 2492 A Bug&#39;s Life(种类并查集)

题目地址:HDU 1829     POJ 2492 这个题可以用两种方法做,第一眼看完题是觉得用dfs染色判断二分图.然后又写的刚学的种类并查集.原来并查集可以这样用,真是神奇.. dfs染色代码: #include <iostream> #include <cstdio> #include <string> #include <cstring> #include <stdlib.h> #include <math.h> #incl

POJ 2492 || HDU 1829:A Bug&#39;s Life(并查集)

传送门: POJ:点击打开链接 HDU:点击打开链接 A Bug's Life Time Limit: 10000MS   Memory Limit: 65536K Total Submissions: 27624   Accepted: 8979 Description Background Professor Hopper is researching the sexual behavior of a rare species of bugs. He assumes that they fe