在社交的過程中,通過朋友,也能認識新的朋友。
在某個朋友關係圖中,假定 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...