HDU 1829 A Bug's Life(种类并查集)
思路:见代码吧。
#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(种类并查集)的更多相关文章
- hdoj 1829 A bug's life 种类并查集
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1829 并查集的一个应用,就是检测是否存在矛盾,就是两个不该相交的集合有了交集.本题就是这样,一种虫子有 ...
- 【POJ】2492 A bug's life ——种类并查集
A Bug's Life Time Limit: 10000MS Memory Limit: 65536K Total Submissions: 28211 Accepted: 9177 De ...
- POJ2492 A Bug's Life —— 种类并查集
题目链接:http://poj.org/problem?id=2492 A Bug's Life Time Limit: 10000MS Memory Limit: 65536K Total Su ...
- hdu1829A Bug's Life(种类并查集)
传送门 关键在于到根节点的距离,如果两个点到根节点的距离相等,那么他们性别肯定就一样(因为前面如果没有特殊情况,两个点就是一男一女的).一旦遇到性别一样的,就说明找到了可疑的 #include< ...
- 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 ...
- 【进阶——种类并查集】hdu 1829 A Bug's Life (基础种类并查集)TUD Programming Contest 2005, Darmstadt, Germany
先说说种类并查集吧. 种类并查集是并查集的一种.但是,种类并查集中的数据是分若干类的.具体属于哪一类,有多少类,都要视具体情况而定.当然属于哪一类,要再开一个数组来储存.所以,种类并查集一般有两个数组 ...
- hdu 1182 A Bug's Life(简单种类并查集)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1829 题意:就是给你m条关系a与b有性关系,问这些关系中是否有同性恋 这是一道简单的种类并查集,而且也 ...
- A Bug's Life(种类并查集)(也是可以用dfs做)
http://acm.hdu.edu.cn/showproblem.php?pid=1829 A Bug's Life Time Limit:5000MS Memory Limit:327 ...
- POJ2492:A Bug's Life(种类并查集)
A Bug's Life Time Limit: 10000MS Memory Limit: 65536K Total Submissions: 45757 Accepted: 14757 题 ...
随机推荐
- linux中的namespace
本文将就namespace这个知识点,进行简单的归纳总结,力求通俗易通.在资料汇总的过程中,参考了许多网上的博客资料,在文章尾部给出相关链接. namespace,命名空间,从名字 ...
- setuid函数解析
在讨论这个setuid函数之前,我们首先要了解的一个东西就是内核为每个进程维护的三个UID值.这三个UID分别是实际用户ID(real uid).有效用户ID(effective uid).保存的设置 ...
- android Timer and TImerTask
android Timer and TImerTask Caused by: java.lang.IllegalStateException: TimerTask is scheduled alrea ...
- WCF 服务与终结点(四)
服务 服务是一组公开功能的集合. 服务内部包含了如语言.技术.版本与框架等概念,服务之间的交互只允许使用规定的通信模式 外界客户端并不知道服务内部的实现细节,所以WCF服务通常通过元数据的方式描述可用 ...
- Bundle、Intent、SharedPreferences
Intent与Bundle的共同点:都继承Parcelable Intent传值与Bundle传值的区别 eg:我现在要从A界面 跳转到B界面或者C界面 这样的话 我就需要写2个Intent ...
- 通过 Javacore 了解线程运行状况
Javacore 是一个当前 JVM 运行状态的快照.通过对Javacore 的分析,可以了解在 JVM 中运行的应用程序的当前状态,比如是否“卡”在某一点上,或在某些代码上运行时间太长. Javac ...
- java之jar命令详解
1. JAR 文件包 JAR 文件就是 Java Archive File,顾名思意,它的应用是与 Java 息息相关的,是 Java 的一种文档格式.JAR 文件非常类似 ZIP 文件——准确的说, ...
- 查看表空间信息SQL集合
1.查看表空间的名称及大小 SELECT t.tablespace_name as "表空间名", )), ) AS "所占物理空间M" FROM dba_ta ...
- mysql 配置主从
1.选择2个ip,1个为主,1个为从:例:主:192.168.12.76 从:192.168.12.772.在192.168.12.76的my.cnf 配置master,添加如下:(红色为添加的内容) ...
- GOOGLE影像地图
卫星地图高清 //