思路:见代码吧。

#include <stdio.h>
#include <string.h>
#include <set>
#include <vector>
#include <queue> using namespace std;
const int maxn=;
int n,m;
int father[maxn];
int num[maxn]; //num[i]表示
int rel[maxn]; //rel[i]表示它与根节点的关系,0代表同性,1代表异性 void init(){
for(int i=;i<=n;i++){
father[i]=i;
num[i]=;
rel[i]=;
}
} //查找根节点时,同时更新它与根节点的关系。这里要注意的是:先更新玩父节点,再更新自己的。
int find_root(int x){
int fa;
if(father[x]==x)
return x;
fa=find_root(father[x]);
rel[x]=(rel[x]+rel[father[x]])%;
father[x]=fa;
return father[x];
}
void Union(int a,int b,int x,int y){
if(num[x]>num[y]){
father[y]=x;
num[x]+=num[y];
//更新y与根节点x的关系
rel[y]=(rel[b]++rel[a])%; //刚开始这里写错了,忘加了rel[a]。。。下面忘加了rel[b]。。。
}
else{
father[x]=y;
num[y]+=num[x];
//更新x与根节点y的关系
rel[x]=(rel[a]++rel[b])%; }
} int main()
{
int t,a,b,flag;
scanf("%d",&t);
for(int q=;q<=t;q++){
scanf("%d%d",&n,&m);
init();
flag=;
for(int i=;i<=m;i++){
scanf("%d%d",&a,&b);
if(flag)
continue;
int x=find_root(a);
int y=find_root(b);
if(x!=y){
Union(a,b,x,y);
}
else{
//当a、b父节点相同时:
//t表示a、b之间的关系,若关系为0,就表示它们是同性
//也可以判断两者与父节点性别的区别是相同的,即rel[a]==rel[b]那么这两个为同性
int t=(rel[b]+rel[a])%;
if(t==){
flag=;
}
}
}
printf("Scenario #%d:\n",q);
if(flag){
printf("Suspicious bugs found!\n");
}
else{
printf("No suspicious bugs found!\n");
}
printf("\n");
}
return ;
}

HDU 1829 A Bug's Life(种类并查集)的更多相关文章

  1. hdoj 1829 A bug's life 种类并查集

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1829 并查集的一个应用,就是检测是否存在矛盾,就是两个不该相交的集合有了交集.本题就是这样,一种虫子有 ...

  2. 【POJ】2492 A bug's life ——种类并查集

    A Bug's Life Time Limit: 10000MS   Memory Limit: 65536K Total Submissions: 28211   Accepted: 9177 De ...

  3. POJ2492 A Bug's Life —— 种类并查集

    题目链接:http://poj.org/problem?id=2492 A Bug's Life Time Limit: 10000MS   Memory Limit: 65536K Total Su ...

  4. hdu1829A Bug's Life(种类并查集)

    传送门 关键在于到根节点的距离,如果两个点到根节点的距离相等,那么他们性别肯定就一样(因为前面如果没有特殊情况,两个点就是一男一女的).一旦遇到性别一样的,就说明找到了可疑的 #include< ...

  5. HDU 1829 A Bug's Life (种类并查集)

    传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1829 A Bug's Life Time Limit: 15000/5000 MS (Java/Oth ...

  6. 【进阶——种类并查集】hdu 1829 A Bug's Life (基础种类并查集)TUD Programming Contest 2005, Darmstadt, Germany

    先说说种类并查集吧. 种类并查集是并查集的一种.但是,种类并查集中的数据是分若干类的.具体属于哪一类,有多少类,都要视具体情况而定.当然属于哪一类,要再开一个数组来储存.所以,种类并查集一般有两个数组 ...

  7. hdu 1182 A Bug's Life(简单种类并查集)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1829 题意:就是给你m条关系a与b有性关系,问这些关系中是否有同性恋 这是一道简单的种类并查集,而且也 ...

  8. A Bug's Life(种类并查集)(也是可以用dfs做)

    http://acm.hdu.edu.cn/showproblem.php?pid=1829   A Bug's Life Time Limit:5000MS     Memory Limit:327 ...

  9. POJ2492:A Bug's Life(种类并查集)

    A Bug's Life Time Limit: 10000MS   Memory Limit: 65536K Total Submissions: 45757   Accepted: 14757 题 ...

随机推荐

  1. 【风马一族_Python】 安装pip与Numpy

    ------------------------------------------------------------------------------------------------- 原因 ...

  2. 问题:LVM lvextend增加空间后,df查看还是原来空间

    1.LVM的调整空间大小: #lvextend -L +1300M /dev/mapper/ycgsstore_sdb-wmy #lvdisplay wmy ycgsstore_sdb -wi-ao- ...

  3. 在MAC系统上进行屏幕录制

    最近打算将一些软件操作过程进行屏幕录制进行视频分享,所以寻思着找一块能在MAC上使用的屏幕录制软件.google了一番,没想到MAC系统自带的QuickTime Player已经内置屏幕录像功能,而且 ...

  4. grep恢复误删除文件内容(转)

    在 Linux 上如果事先没有用别名(alias)修改默认的 rm 功能,rm 后文件就会丢失,幸运的是,在一般的删除文件操作中,Linux 并不会立即清空存储该文件的 block 内容,而只会释放该 ...

  5. MotionEvent中getX()和getRawX()的区别

    http://blog.csdn.net/ztp800201/article/details/17218067 public class Res extends Activity implements ...

  6. 七天学会NodeJS-学习笔记

    在网上发现一篇nodeJS教程,名为七天学会NodeJS,标题很有吸引力.我不指望七天能学会,只希望可以入门,下面是我的学习笔记和遇到的问题. 教程网址:http://nqdeng.github.io ...

  7. Vim复制粘贴

    用了快一年Vim了,今天想要将vim里的一句话复制到浏览器里,结果捣鼓了半天.汗! 解决方案: 在vim中按“V”进入可视模式,选中要复制的文字 接下来要按3个键“+y(引号.加号.字母y),这样要复 ...

  8. WordPress 主题开发 - (一) 前言 待翻译

    原文出自: http://themeshaper.com/2012/10/22/the-themeshaper-wordpress-theme-tutorial-2nd-edition/ THE TH ...

  9. 【转】为什么我说 Android 很糟糕

    http://zhuanlan.zhihu.com/wooyun/19879016 Android 的安全问题一直被吐槽,包括不安全的APP市场.上次的远程命令执行漏洞.还有它的权限机制,总之一团糟, ...

  10. PAT IO-02 整数四则运算

    /* *PAT IO-02 整数四则运算 *2015-07-30 *作者:flx413 */ #include<stdio.h> int main() { int a, b; scanf( ...