並查集 問題列表 1192 朋友

2022-06-20 14:57:15 字數 1056 閱讀 5465

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

乙個儲存所有元素的陣列:fri[n]  (朋友)

此時所有的元素分別獨立,fir[i]=i,都指向自己。

void init(int

n)}

找x的朋友,一直到某個人的朋友為自己(根結點)為止。可用於判斷兩個人是否在同乙個鏈上(假如在同乙個鏈上,那麼他們的根節點一定相同)

int find(int

x)

連線兩個人(使兩個人成為朋友),使fri[x]=y。

void join(int x, int

y)}

1、用集合中的某個元素來代表這個集合,則該元素稱為此集合的代表元;

2 、乙個集合內的所有元素組織成以代表元為根的樹形結構;

3 、對於每乙個元素 x,fri[x] 存放 x 在樹形結構中的朋友節點(如果 x 是根節點,則fri[x] = x);

4 、對於查詢操作,假設需要確定 x 所在的的集合,也就是確定集合的代表元。可以沿著fri[x]不斷在樹形結構中向上移動,直到到達根節點。

在社交的過程中,通過朋友,也能認識新的朋友。在某個朋友關係圖中,假定 a 和 b 是朋友,b 和 c 是朋友,那麼 a 和 c 也會成為朋友。即,我們規定朋友的朋友也是朋友。現在,已知若干對朋友關係,詢問某兩個人是不是朋友。

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

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

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

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

製作:bdt20040

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

在社交的過程中,通過朋友,也能認識新的朋友。在某個朋友關係圖中,假定 a 和 b 是朋友,b 和 c 是朋友,那麼 a 和 c 也會成為朋友。即,我們規定朋友的朋友也是朋友。現在,已知若干對朋友關係,詢問某兩個人是不是朋友。請編寫乙個程式來解決這個問題吧。第一行 三個整數 n,m,p n 5000,...

並查集 好朋友

天勤書上一道題,很簡潔的展現了並查集的思想。大致意思是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...