朋友(典型的並查集問題)

2021-09-26 01:41:42 字數 836 閱讀 4410

在社交的過程中,通過朋友,也能認識新的朋友。

在某個朋友關係圖中,假定 a 和 b 是朋友,b 和 c 是朋友,那麼 a 和 c 也會成為朋友。即,我們規定朋友的朋友也是朋友。

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

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

第一行:三個整數 n,m,p ((n≤5000,m≤5000,p≤5000),分別表示有 n 個人,m 個朋友關係,詢問 p 對朋友關係。

接下來 m 行:每行兩個數 ai ​ ,bi ​,1≤ai ​,bi ≤n,表示ai 和 bi ​具有朋友關係。

接下來 p 行:每行兩個數,詢問兩人是否為朋友。

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

6 5 3

1 21 5

3 45 2

1 31 4

2 35 6

yesyes

no這就是乙個典型的並查集問題

#includeusing namespace std;

int father[5005],n;

void init(int n)

}int get(int x)

return father[x] = get(father[x]);

}void merge(int a,int b)

}int main()

for(int k = 0;k>a2>>b2;

int x = get(a2);

int y = get(b2);

if(x==y)else

}return 0;

}

並查集 問題列表 1192 朋友

並查集 是一種樹型的資料結構,用於處理一些不相加集合的合併和查詢問題。在使用中常常以森林來表示。並查集也是用來維護集合的,和set得到不同之處在於並查集能很方便地同時維護很多集合。如果用set來維護會非常的麻煩。並查集的核心思想是記錄每個結點的根結點是哪個結點。乙個儲存所有元素的陣列 fri n 朋...

並查集 好朋友

天勤書上一道題,很簡潔的展現了並查集的思想。大致意思是x和y是和朋友,xx和yy是好朋友.要你分組使組內都是好朋友,組外都不是好朋友。資料量比較小,很水,路徑壓縮不考慮也沒問題。includeusing namespace std define max 200 int father max bool...

並查集問題

輸入 第一行 城鎮數目n,道路數目m 接下的每一行表示 某條道路連線的城鎮號 輸出 至少還需要建設的道路數目,才能將所有的城鎮連線起來 例子 輸入 3 31 2 1 22 1 輸出 1解釋 要使城鎮123連通,還需要修建23之間的連通路 即還需要修建一條路 cpp實現問題求解 include usi...