分析:所谓带权并查集,就是比朴素的并查集多了一个数组,记录一些东西,例如到根的距离,或者和根的关系等

这个题,权数组为relation 代表的关系  1 和父节点不同性别,0,和父节点同性别

并查集一个很大的方便在于它可以进行路径压缩,可以将树高维持在2(当然有一些其它应用是不需要路径压缩的)

这就需要在路径压缩的时候,随之得到一个节点和树根的关系,这样我们可以通过路径中的父子关系,递归得到根节点和当前结点的关系

已知每个点和根节点的关系,那么任意两个点关系也很容易得到(这就是路径压缩的意义)

这需要设计一个路径压缩算法,对于此题是 relation[x]=(relation[x]+relation[t])%2;

当需要合并两个集合时,我们要合并两个根节点,由于我们得到了每个节点和根节点关系,

所以根据当前的关系,很容易将两个根节点合并,此题是 relation[x]=(relation[u]-relation[v]+1)%2;

总结:其实这题和经典并查集食物链那道题是一样的,只不过简单的多

带权并查集的应用 关键在于

1:权值数组代表什么

2:设计方便的路径压缩算法

3:搞清楚合并时的树根关系

#include <stdio.h>
#include <cstring>
const int N=2e3+;
int fa[N],n,m,T;
int relation[N];
int find(int x){
if(x==fa[x])return x;
int t=fa[x];
fa[x]=find(fa[x]);
relation[x]=(relation[x]+relation[t])%;
return fa[x];
}
void Union(int u,int v){
int x=find(u),y=find(v);
fa[x]=y;
relation[x]=(relation[u]-relation[v]+)%;
}
int main()
{
int cas=;
scanf("%d",&T);
while(T--){
printf("Scenario #%d:\n",++cas);
scanf("%d%d",&n,&m);
for(int i=;i<=n;++i)fa[i]=i,relation[i]=;
bool flag=;
while(m--){
int u,v;
scanf("%d%d",&u,&v);
if(find(u)==find(v)){
if(relation[u]==relation[v])flag=;
}
else Union(u,v);
}
if(flag)printf("Suspicious bugs found!\n\n");
else printf("No suspicious bugs found!\n\n");
}
return ;
}

POJ2492 A Bug's Life 带权并查集的更多相关文章

  1. POJ 2492 A Bug's Life 带权并查集

    题意: 思路: mod2 意义下的带权并查集 如果两只虫子是异性恋,它们的距离应该是1. 如果两只虫子相恋且距离为零,则它们是同性恋. (出题人好猥琐啊) 注意: 不能输入一半就break出来.... ...

  2. poj2492A Bug's Life——带权并查集

    题目:http://poj.org/problem?id=2492 所有元素加入同一个并查集中,通过其偏移量%2将其分类为同性与异性,据此判断事件. 代码如下: #include<iostrea ...

  3. POJ 2492 A Bug's Life (带权并查集 && 向量偏移)

    题意 : 给你 n 只虫且性别只有公母, 接下来给出 m 个关系, 这 m 个关系中都是代表这两只虫能够交配, 就是默认异性, 问你在给出的关系中有没有与异性交配这一事实相反的, 即同性之间给出了交配 ...

  4. poj2492 A Bug's Life(带权并查集)

    题目链接 http://poj.org/problem?id=2492 题意 虫子有两种性别,有n只虫子,编号1~n,输入m组数据,每组数据包含a.b两只虫子,表示a.b为不同性别的虫子,根据输入的m ...

  5. hdu 1829-A Bug's LIfe(简单带权并查集)

    题意:Bug有两种性别,异性之间才交往, 让你根据数据判断是否存在同性恋,输入有 t 组数据,每组数据给出bug数量n, 和关系数m, 以下m行给出相交往的一对Bug编号 a, b.只需要判断有没有, ...

  6. HDU 1829 A Bug's Life 【带权并查集/补集法/向量法】

    Background Professor Hopper is researching the sexual behavior of a rare species of bugs. He assumes ...

  7. hdu 1829 &amp;poj 2492 A Bug&#39;s Life(推断二分图、带权并查集)

    A Bug's Life Time Limit: 15000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) To ...

  8. A Bug's Life POJ - 2492 (带权并查集)

    A Bug's Life POJ - 2492 Background Professor Hopper is researching the sexual behavior of a rare spe ...

  9. hdoj--1829--A Bug's Life(带权并查集)

    A Bug's Life Time Limit: 15000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) To ...

随机推荐

  1. MySql启动提示:The server quit without updating PID file(…)失败

    在网上找了很多 1.可能是/usr/local/mysql/data/rekfan.pid文件没有写的权限解决方法 :给予权限,执行 “chown -R mysql:mysql /var/data”  ...

  2. width() innerwidth() outerwidth() css('width')

    不多说,用一图足以说明 首先先解释下普通元素和非普通元素, 非普通元素是指window,document这些 元素对象, 普通元素是指除window,document之外的元素,如:div 对于普通的 ...

  3. RSA算法解析

    RSA算法原理(一) 如果你问我,哪一种算法最重要? 我可能会回答"公钥加密算法". 因为它是计算机通信安全的基石,保证了加密数据不会被破解.你可以想象一下,信用卡交易被破解的后果 ...

  4. STL的pair学习, map学习

    http://blog.csdn.net/calvin_zcx/article/details/6072286 http://www.linuxidc.com/Linux/2014-10/107621 ...

  5. C语言的数据类型

    复习之余,做点笔记<C语言之数据类型> 一.整数数据类型 (1)整数数据类型 整数类型 char 字符型变量   1字节(8Bit) short 短整型      2字节(16Bit) i ...

  6. JQ实现3D拖拽效果

    <!DOCTYPE HTML> <html onselectstart='return false'> <head> <meta http-equiv=&qu ...

  7. C#正则表达式之字符替换

    string strTest= "www.BaiDu.com",strRst=""; //忽略大小写,将strTest中的BaiDu替换为baidu Regex ...

  8. AOT

    预 (AOT) 编译器 https://angular.cn/docs/ts/latest/cookbook/aot-compiler.html To run your app in AoT mode ...

  9. POJ 3352 Road Construction (边双连通分量)

    题目链接 题意 :有一个景点要修路,但是有些景点只有一条路可达,若是修路的话则有些景点就到不了,所以要临时搭一些路,以保证无论哪条路在修都能让游客到达任何一个景点 思路 :把景点看成点,路看成边,看要 ...

  10. JavaScript获取HTML DOM节点元素详解(转)

    在Web运用程序特别是Web 2.0程序开发中,经常要获取页面中某个元素,然后更新该元素的样式.内容等.如何获取要更新的元素,是首先要处理的疑问. 51CTO推荐阅读:JavaScript DOM文档 ...