思路:见代码吧。

#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. linux中的namespace

         本文将就namespace这个知识点,进行简单的归纳总结,力求通俗易通.在资料汇总的过程中,参考了许多网上的博客资料,在文章尾部给出相关链接.      namespace,命名空间,从名字 ...

  2. setuid函数解析

    在讨论这个setuid函数之前,我们首先要了解的一个东西就是内核为每个进程维护的三个UID值.这三个UID分别是实际用户ID(real uid).有效用户ID(effective uid).保存的设置 ...

  3. android Timer and TImerTask

    android Timer and TImerTask Caused by: java.lang.IllegalStateException: TimerTask is scheduled alrea ...

  4. WCF 服务与终结点(四)

    服务 服务是一组公开功能的集合. 服务内部包含了如语言.技术.版本与框架等概念,服务之间的交互只允许使用规定的通信模式 外界客户端并不知道服务内部的实现细节,所以WCF服务通常通过元数据的方式描述可用 ...

  5. Bundle、Intent、SharedPreferences

    Intent与Bundle的共同点:都继承Parcelable Intent传值与Bundle传值的区别 eg:我现在要从A界面   跳转到B界面或者C界面   这样的话 我就需要写2个Intent  ...

  6. 通过 Javacore 了解线程运行状况

    Javacore 是一个当前 JVM 运行状态的快照.通过对Javacore 的分析,可以了解在 JVM 中运行的应用程序的当前状态,比如是否“卡”在某一点上,或在某些代码上运行时间太长. Javac ...

  7. java之jar命令详解

    1. JAR 文件包 JAR 文件就是 Java Archive File,顾名思意,它的应用是与 Java 息息相关的,是 Java 的一种文档格式.JAR 文件非常类似 ZIP 文件——准确的说, ...

  8. 查看表空间信息SQL集合

    1.查看表空间的名称及大小 SELECT t.tablespace_name as "表空间名", )), ) AS "所占物理空间M" FROM dba_ta ...

  9. mysql 配置主从

    1.选择2个ip,1个为主,1个为从:例:主:192.168.12.76 从:192.168.12.772.在192.168.12.76的my.cnf 配置master,添加如下:(红色为添加的内容) ...

  10. GOOGLE影像地图

    卫星地图高清 //