並查集模板

2022-05-19 11:24:17 字數 983 閱讀 9961

或許你並不知道,你的某個朋友是你的親戚。他可能是你的曾祖父的外公的女婿的外甥女的表姐的孫子。如果能得到完整的家譜,判斷兩個人是否親戚應該是可行的,但如果兩個人的最近公共祖先與他們相隔好幾代,使得家譜十分龐大,那麼檢驗親戚關係實非人力所能及。在這種情況下,最好的幫手就是計算機。為了將問題簡化,你將得到一些親戚關係的資訊,如marry和tom是親戚,tom和ben是親戚,等等。從這些資訊中,你可以推出marry和ben是親戚。請寫乙個程式,對於我們的關於親戚關係的提問,以最快的速度給出答案。

輸入由兩部分組成。 

第一部分以n,m開始。n為問題涉及的人的個數(1  n  20000)。這些人的編號為1,2,3,…, n。下面有m行(1  m  1 000 000),每行有兩個數ai, bi,表示已知ai和bi是親戚。第二部分以q開始。以下q行有q個詢問(1 <=  q < = 1 000 000),每行為ci, di,表示詢問ci和di是否為親戚。

對於每個詢問ci, di,輸出一行:若ci和di為親戚,則輸出「yes」,否則輸出「no」。

10 7

2 45 7

1 38 9

1 25 6

2 33

3 47 10

8 9

yes

noyes

並查集主要使用在圖論之中,在資料範圍過大,二維陣列存不下的情況下,通常採用並查集來存。

並查集有兩種寫法,一種是遞迴的(個人喜歡,**短),一種是非遞迴的,目的是查詢祖先;

如果兩個有邊相連的點祖先不一致,就把其中乙個祖先的祖先更新。

**:

1 #include2

int n,m,q,f[20001

],a,b,x,y;

3int find(intk)4

10int

main()

1123 scanf("

%d",&q);

24for (int i=1;i<=q;i++)

2534 }

並查集模板

來自lifeng wang http hi.baidu.com fandywang jlu 前輩06年寫的東西,追隨前人足跡繼續努力。並查集的一些題目和相關解題報告 poj 1611 the suspects 最基礎的並查集 poj 2524 ubiquitous religions 最基本的並查集...

並查集模板

普通並查集 define max size 100005 int pa max size 儲存有向圖的邊 void init 初始化 該函式可以根據具體情況儲存和初始化需要的內容 int findset int a 不帶路勁壓縮 return a void union nodes int a,int...

並查集模板

codevs 2597 團夥 題目描述 description 1920年的芝加哥,出現了一群強盜。如果兩個強盜遇上了,那麼他們要麼是朋友,要麼是敵人。而且有一點是肯定的,就是 我朋友的朋友是我的朋友 我敵人的敵人也是我的朋友。兩個強盜是同一團夥的條件是當且僅當他們是朋友。現在給你一些關於強盜們的資...