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

题目:http://poj.org/problem?id=2492

所有元素加入同一个并查集中,通过其偏移量%2将其分类为同性与异性,据此判断事件。

代码如下:

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int p,n,m,fa[2005],d[2005];
bool flag;
int find(int x)
{
	if(fa[x]==x)return x;
	else
	{
		int root=find(fa[x]);
		d[x]+=d[fa[x]];
		fa[x]=root;
	}
	return fa[x];
}
int main()
{
	scanf("%d",&p);
	for(int g=1;g<=p;g++)
	{
		scanf("%d%d",&n,&m);
		int a,b;
		flag=0;
//		memset(fa,0,sizeof fa);
		for(int i=1;i<=n;i++)fa[i]=i;
		memset(d,0,sizeof d);
		for(int i=1;i<=m;i++)
		{
			scanf("%d%d",&a,&b);
			if(flag)continue;
			int u=find(a),v=find(b);
			if(u==v)
				if((d[a]-d[b])%2==0)flag=1;//同性
			if(u!=v)
			{
				//du+da=db+1;
				fa[u]=v;
				d[u]=d[b]-d[a]+1;
			}
		}
		if(flag)printf("Scenario #%d:\nSuspicious bugs found!\n\n",g);
		else printf("Scenario #%d:\nNo suspicious bugs found!\n\n",g);
	}
}

  

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

原文地址:https://www.cnblogs.com/Zinn/p/8440035.html

时间: 2024-10-03 23:04:33

poj2492A Bug's Life——带权并查集的相关文章

POJ 2492 A Bug&#39;s Life (带权并查集 &amp;&amp; 向量偏移)

题意 : 给你 n 只虫且性别只有公母, 接下来给出 m 个关系, 这 m 个关系中都是代表这两只虫能够交配, 就是默认异性, 问你在给出的关系中有没有与异性交配这一事实相反的, 即同性之间给出了交配关系. 分析 : 本题雷同POJ 1182 食物链, 如果会了那一题, 那现在这题便简单多了, 建议先了解食物链的偏移向量做法.这里也是使用向量的思考方式来进行relation的变化, 这里我令 relation = 0为同性, relation = 1为异性, 接下来的步骤就和食物链的雷同了. 优

POJ-2492.A Bug&#39;s Life(带权并查集)

A Bug's Life Time Limit: 10000MS   Memory Limit: 65536K Total Submissions: 48043   Accepted: 15483 Description Background Professor Hopper is researching the sexual behavior of a rare species of bugs. He assumes that they feature two different gender

poj2492 A Bug&#39;s Life【带权并查集】

题目链接:http://poj.org/problem?id=2492 题目描述:找基佬游戏(汗-_-b)有个hentai科学家研究虫子种群,不断地给出二元组xy,表示x和y是异性交往,但是可能会出现矛盾(找到基佬),比如1与2是异性恋,2与3是异性恋,却又告诉你1和3是异性恋.问种群中存不存在基佬败类 思路:与poj1182“食物链”几乎一样,还简单一点,毕竟只有两类物品.par[i]表示父节点,d[i]表示偏移量,0为同性,1为异性.不过要注意的一点是所有合并的过程要对二取模,比如x找到根结

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

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

hdu 1829-A Bug&#39;s LIfe(简单带权并查集)

题意:Bug有两种性别,异性之间才交往, 让你根据数据判断是否存在同性恋,输入有 t 组数据,每组数据给出bug数量n, 和关系数m, 以下m行给出相交往的一对Bug编号 a, b.只需要判断有没有,按题目要求输出.这题有点坑的地方在于输出上多了一行空行,不PE都没注意到. 思路: 用一个数组gender[i] 记录当前节点 i 与根节点的关系,parent[i]数组记录当前节点的父节点. 因为是带权并查集,在Find_Parent 时更新当前节点与根节点的关系,且路径压缩至根节点下, 所以不用

A Bug&#39;s Life POJ - 2492 (带权并查集)

A Bug's Life POJ - 2492 Background Professor Hopper is researching the sexual behavior of a rare species of bugs. He assumes that they feature two different genders and that they only interact with bugs of the opposite gender. In his experiment, indi

带权并查集(含种类并查集)【经典模板】 例题:①POJ 1182 食物链(经典)②HDU - 1829 A bug&#39;s life(简单) ③hihoCoder 1515 : 分数调查

带权并查集: 增加一个 value 值,并且每次合并和查找的时候需要去维护这个 value 例题一 :POJ 1182 食物链(经典) 题目链接:https://vjudge.net/contest/339425#problem/E 带权并查集的解法 定义两个数组fa[ ]和rela[ ],fa用来判断集合关系,rela用来描述其与根节点的关系.因为关系满足传递性,所以可以推导出给出条件下的当前关系,在判断与之前已有关系是否矛盾. 本题的解法巧妙地利用了模运算,rela数组用0表示同类,1表示当

并查集练习2(带权并查集)

明天旅游去爬山逛庙玩,今天练一天然后早早睡觉啦~ poj1703 Find them, Catch them (带权并查集) 1 #include<cstdio> 2 const int N=1e5+1; 3 int f[N]; 4 int r[N];//表示与父节点的关系,0同类,1不同类 5 int n; 6 void init(){ 7 for(int i=1;i<=n;++i){ 8 f[i]=i; r[i]=0; 9 } 10 } 11 int fin(int x){ 12 i

(中等) POJ 1703 Find them, Catch them,带权并查集。

Description The police office in Tadu City decides to say ends to the chaos, as launch actions to root up the TWO gangs in the city, Gang Dragon and Gang Snake. However, the police first needs to identify which gang a criminal belongs to. The present