並查集應用:入門級

題目引用自洛谷。

  若某個家族人員過於龐大,要判斷兩個是否是親戚,確實還很不容易,現在給出某個親戚關係圖,求任意給出的兩個人是否具有親戚關係。規定:x和y是親戚,y和z是親戚,那麼x和z也是親戚。如果x,y是親戚,那麼x的親戚都是y的親戚,y的親戚也都是x的親戚。
第一行:三個整數n,m,p,(n<=5000,m<=5000,p<=5000),分別表示有n個人,m個親戚關係,詢問p對親戚關係。
以下m行:每行兩個數Mi,Mj,1<=Mi,Mj<=N,表示Ai和Bi具有親戚關係。
接下來p行:每行兩個數Pi,Pj,詢問Pi和Pj是否具有親戚關係。
輸出P行,每行一個’Yes’或’No’。表示第i個詢問的答案爲“具有”或“不具有”親戚關係。
這是一道非常簡單的並查集題目。沒有實際考察價值僅僅用於並查集的入門:

我在這裏提供的代碼都使用了類封裝,事實上這樣可能會常數級降低效率。

#include 
#include 
#include 
#define UFS_LIMIT 10000
using namespace std;
class UnionFindSet
{
	public:
		int father[UFS_LIMIT];
		UnionFindSet()
		{
			for(int i=0;i>n>>m>>p;
	for(i=0;i>t1>>t2, ufs.Union(t1,t2);
	for(i=0;i

>t1>>t2, cout<<(ufs.IfSame(t1,t2)?"Yes":"No")<



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