小希的迷宫

Posted rainzzz

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了小希的迷宫相关的知识,希望对你有一定的参考价值。

http://acm.hdu.edu.cn/showproblem.php?pid=1272  题目链接

 

 

思路:

1.每输入一组数据,如果两个点的祖先都是相同的,那么说明他们已经是一个集合的了,如果再连接a,b两个点,就会构成回路,这里也就是要输出no.

2.并查集判断是否存在回路已经通过上述过程判断完成了,但是我们要保证只有一个集合,题目中没有保证,所以我们这里首先要对出现过的点进行标记,然后从1到100005这些个点都进行判断,如果标记过(表示这个点出现过)并且f[i]==i的话,那么就说明i现在是个祖宗,表示有一个集合了,这里如果集合大于1,那就说明要输出NO了。

#include<iostream>
#include<map>
#include<string.h>
using namespace std;
// typedef struct node
// {
// 	int nVal;
// }FindSet;
int judge=0;
int Visit[100005];
map<int,int>SetToFather;
map<int,int>SetSize;

void makeSet()
{
	SetToFather.clear();
	SetSize.clear();
	//coding
	for(int i=0;i<100005;i++)
	{
		SetSize[i]=1;
		SetToFather[i]=i;
	}

}

int FindHead(int nVal)
{
	int father=SetToFather[nVal];
	if(nVal!=father)
	{
		father=FindHead(father);
	}
	SetToFather[nVal]=father;
	return father;
}

int UnionSet(int naVal,int nbVal)
{
	int afather=FindHead(naVal);
	int bfather=FindHead(nbVal);
	Visit[naVal]=1;
	Visit[nbVal]=1;
	if(afather==bfather)
	{
		judge=1;

	}
	else
	{
		int asize=SetSize[afather];
		int bsize=SetSize[bfather];
		if(asize>bsize)
		{
			SetToFather[bfather]=afather;
			SetSize[afather]=asize+bsize;
		}
		else
		{
			SetToFather[afather]=bfather;
			SetSize[bfather]=asize+bsize;
		}
	}
}


int main()
{
	ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
	int v1,v2;
	while(cin>>v1>>v2)
	{
		if(v1==-1 && v2==-1) break;
		judge=0;
		SetToFather.clear();
		SetSize.clear();
		makeSet();
		memset(Visit,0,sizeof(Visit));	
		if(v1==0 && v2 ==0)
		{
			printf("Yes
");
			continue;
		}
		UnionSet(v1,v2);
		while(cin>>v1>>v2)
		{
			if(v1==0 && v2==0) break;
			UnionSet(v1,v2);
		}
		if(judge)
		{
			printf("No
");
		}
		else
		{
			int ncount=0;
			for (int i = 0; i < 100005; ++i)
			{
				if(Visit[i]&&FindHead(i)==i)
				{
					//printf("%d
", i);
					ncount++;
				}
			}
			//printf("%d
", ncount);
			if(ncount==1)
			{
				printf("Yes
");
			}
			else
			{
				printf("No
");
			}
		}

	}
	return 0;
}

  

以上是关于小希的迷宫的主要内容,如果未能解决你的问题,请参考以下文章

小希的迷宫

HDU 1272 小希的迷宫

HDU1272--小希的迷宫(并查集)

hdu 1272 小希的迷宫 (并查集)

HDU 1272 小希的迷宫(乱搞||并查集)

HDU 1272 小希的迷宫