天天看點

并查集

并查集是一種樹形的資料結構,用于集合的合并。

與C++STL相比的優勢:

可以同時維護多個集合

快速的合并兩個集合

**現實:

用數組實作。father[1000];**

1. 初始化:

for(int i=1;i<=n;++i) father[i]=i; //預設存在n個根,即n個集合。

2. 查找一個元素所在的集合(即查找根)

這裡解釋下,數組的下标代表數組的權值,而數組中的值指的是數組所在的父節點。

3.合并兩個集合。

經典例題:

在社交的過程中,通過朋友,也能認識新的朋友。在某個朋友關系圖中,假定 A 和 B 是朋友,B 和 C 是朋友,那麼 A 和 C 也會成為朋友。即,我們規定朋友的朋友也是朋友。

現在,已知若幹對朋友關系,詢問某兩個人是不是朋友。

請編寫一個程式來解決這個問題吧。

輸入格式

第一行:三個整數 n,m,p(n≤5000,m≤5000,p≤5000),

分别表示有 n 個人,m 個朋友關系,詢問 p 對朋友關系。

接下來 m 行:每行兩個數 Ai,Bi1≤Ai,Bi≤N,表示 A i和 Bi具有朋友關系。接下來 p行:每行兩個數,詢問兩人是否為朋友。

輸出格式

輸出共 p 行,每行一個Yes或No。表示第 i個詢問的答案為是否朋友。

樣例輸入

6 5 3

1 2

1 5

3 4

5 2

1 3

1 4

2 3

5 6

樣例輸出

Yes

No

繼續閱讀