並查集

const int maxn=333;
int n;
int parent[maxn];

void UFSet()
{
	for(int i=0;i<=n;i++)
	parent[i]=-1;
}

int find(int x)
{
	int s=x;
	while(parent[s]>0)
	s=parent[s];
	
	int tmp;
	while(s!=x)
	{
		tmp=parent[x];
		parent[x]=s;
		x=tmp;
	}
	return s;
}

void Union(int x,int y)
{
	int xx,yy,tmp;
	xx=find(x);
	yy=find(y);
	if(xx!=yy)
	{
		tmp=parent[xx]+parent[yy];
		if(parent[xx]<parent[yy])
		{
			parent[yy]=x;
			parent[xx]=tmp;
		}
		else
		{
			parent[xx]=y;
			parent[yy]=tmp;
		}
	}
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章