POJ 1703 Find them, Catch them G++ C输入需要看书 用关系数组的方法未实现


 

#include <iostream>
#include <cstdio>
#include <cstring>
//#include <vector>
using namespace std;
//C输入容易出错 抄博友 需看书 

//关系数组没实现  需实现
//关系数组实现并不快 
//挑战程序设计竞赛 
int par[200002];//父亲 
//int ran[200002];//树的高度 

//初始化n个元素 

void init(int n) 
{
	for(int i=0;i<n;i++)
	{
		par[i]=i;
		//ran[i]=0;
	}
	//memset(par,-1,sizeof(par));
	//memset(ran,0,sizeof(ran));	
}

//查询树的根
int find(int x)
{
	//if(par[x]==-1)
	if(par[x]==x)	
	{
		return x;
	}else
	{
		return par[x]=find(par[x]);
	}
} 
//合并x和y所属的集合
void unite(int x,int y)
{
	x=find(x);
	y=find(y);
	par[x]=y;
	/*
	if(x==y)
	{
		return;
	}
	if(ran[x]<ran[y])
	{
		par[x]=y; 
	}else
	{
		par[y]=x;
		if(ran[x]==ran[y])
		{
			ran[x]++;
		}
	}*/
} 
//判断x和y是否属于同一个集合
bool same(int x,int y)
{
 	return find(x)==find(y);
} 
int main()
{
	int NUM;
	scanf("%d",&NUM);
	for(int i=0;i<NUM;i++)
	{
		int N,M;
		scanf("%d %d",&N,&M);
		getchar();//抄博友   出错很多次  看书 
		//cout<<N<<" "<<M<<endl;
		init(N*2+1);
		for(int j=0;j<M;j++)
		{
			char ml;
			int a;
			int b;
			scanf("%c%d%d",&ml,&a,&b);
			getchar();//抄博友   出错很多次  看书  百练通过的程序有错误输入 
			//cout<<ml<<" "<<a<<" "<<b<<endl;
			if(ml=='D')
			{
				unite(a,b+N);
				unite(a+N,b);
			}else if(ml=='A')
			{
				if(same(a,b))
				{
					printf("In the same gang.\n");
				}else if(same(a,b+N))
				{
					printf("In different gangs.\n");
				}else
				{
					printf("Not sure yet.\n");
				}
			}
		}
	} 
	return 0;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值