並查集的例題

2021-07-23 10:25:36 字數 996 閱讀 2405

/*題意為: 已知學校有n個學生 ,想知道有多少個宗教,但是不能乙個乙個問學生   ,已知兩個一起的是乙個宗教的,現可以問m對學生,請求出最多有多少個宗教    輸入資料  10   4          2   3   4   5   4   8    5   8    答案為7                由題知採用並查集求解 (可看做二叉樹 )     */

#include

using namespace  std;

//const  int max = 5005;

int pa[1000];            //定義陣列,用來儲存結點

int rank[1000];          

//定義秩,即某乙個結點可容納的結點數

int ans;                                 

//答案

void set(int x)                   

//初始化每個結點,是自己就是乙個根結點

int find(int x)

//尋找結點的根

return pa[x];                     

//返回找到的根結點

}void  union(int x, int y)

//聯合函式 ,把兩個結點連線起來

ans--;      

//如果是相等的,則宗教總數就會少一

if (rank[x] > rank[y])

//看誰的秩大,即已經擁有的結點多,把稍等放在多的下面,為了減低樹的高度,查詢時方便

else}}

int main()

ans = n;

int person1, person2;  

for (i = 0; i < m; i++)

int k = 1;

cout <<"case" cin >> n >> m;

}return 0;

}

並查集例題

題目描述 假如已知有n個人和m對好友關係 存於集合r 如果兩個人是直接或間接的好友 好友的好友的好友 則認為他們屬於同乙個朋友圈。請寫程式求出這n個人裡一共有多少個朋友圈。輸入 輸入包含多個測試用例,每個測試用例的第一行包含兩個正整數 n m,1 n,m 100000。接下來有m行,每行分別輸入兩個...

並查集例題

找出根節點,如果只有乙個節點,根節點是自己 作迴圈,如果父節點不是自己,一直迴圈 public int find int x return x public void union int x,int y parent rootx rooty count 並查集自己的理解 剛開始每個節點都是看作單獨的...

並查集的簡單例題

並查集是一種樹型的資料結構,用於處理一些不相交集合 disjoint sets 的合併及查詢問題。操作步驟 1.初始化 把每個節點初始化為自身。即自身為自身的根節點 2.查詢 查詢元素所在的集合。即根節點 3.合併 將兩個元素所在的集合並成同乙個集合。即連線根節點 簡單例題 此題主要難點在於判斷是否...