poj 2492 并查集(虫子交配,同性恋?)

题意:一组昆虫性别有公有母,现给出一组交配信息,问是否有同性恋发生。

思路:1、并查集。维护一个性别数组。关键代码见注释!

2、二分图着色判断是否为二分图。也就是在交配的虫子之间连边,判断每一个连通分量是否为二分图。

#include <stdio.h>
#include <string.h>
#define N 2005
int f[N],gender[N];
int c,n,m,T;
int find(int x){
	int temp = f[x];
	if(f[x] == x)
		return x;
	f[x] = find(f[x]);
	gender[x] = gender[x] ^ gender[temp];//根据父节点的性别是否变化更新自己的(也就是一条链顶端节点性别变化,后边的跟着变化)
	return f[x];
}
int main(){
	freopen("a.txt","r",stdin);
	scanf("%d",&T);
	for(c = 1;c<=T;c++){
		int i,j,x,y,xx,yy,flag = 0;
		scanf("%d %d",&n,&m);
		for(i = 1;i<=n;i++)
			f[i]  = i;
		memset(gender,0,sizeof(gender));
		for(i = 0;i<m;i++){
			scanf("%d %d",&x,&y);
			if(flag)
				continue;
			xx = find(x);
			yy = find(y);
			if(xx == yy)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值