并查集是一種樹形的資料結構,用于集合的合并。
與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