並查集 小公尺筆試題

2021-07-14 16:02:39 字數 1155 閱讀 8090

並查集(union-find sets)是一種非常精巧而實用的資料結構,它主要用於處理一些不相交集合的合併問題。一些常見的用途有求連通子圖、求最小生成樹的 kruskal 演算法和求最近公共祖先(least common ancestors, lca)等。

使用並查集時,首先會存在一組不相交的動態集合 s=

s=,一般都會使用乙個整數表示集合中的乙個元素。

每個集合可能包含乙個或多個元素,並選出集合中的某個元素作為代表。每個集合中具體包含了哪些元素是不關心的,具體選擇哪個元素作為代表一般也是不關心的。我們關心的是,對於給定的元素,可以很快的找到這個元素所在的集合(的代表),以及合併兩個元素所在的集合,而且這些操作的時間複雜度都是常數級的。

並查集的實現原理也比較簡單,就是使用樹來表示集合,樹的每個節點就表示集合中的乙個元素,樹根對應的元素就是該集合的代表,同乙個根節點,就在乙個集合內。開始時,每個元素都是乙個集合,按規律進行合併。

如圖:

eg:小公尺筆試題

**實現:

#includeusing namespace std;

class unionset

} ~unionset()

protected:

int _findroot(int x)

public:

void _union(int x, int y) }

int _getunioncount()

return --count; //減去_us[0]的-1

}protected:

int* _us;

int _n;

};int _friendcircle(int n, int m, int r[2])

return uf._getunioncount();

}int main()

, , , , };

int ret = _friendcircle(9, 5, r);//當有0的時候 _n=n+1

return 0;

}

小公尺2023年校園招聘筆試題 簡單並查集

九度 題目描述 假如已知有n個人和m對好友關係 存於數字r 如果兩個人是直接或間接的好友 好友的好友的好友.則認為他們屬於同乙個朋友圈,請寫程式求出這n個人裡一共有多少個朋友圈。假如 n 5 m 3 r 表示有5個人,1和2是好友,2和3是好友,4和5是好友,則1 2 3屬於乙個朋友圈,4 5屬於另...

並查集 百度筆試題

例如 小明,小王 小軍,小王 小麗,小李 是隊友,那麼小軍和小明是隊友,小軍和小麗不是隊友。分析 考查並查集。include define maxnum 100 using namespace std static string name maxnum static int group maxnum...

並查集 小公尺筆試題求朋友圈個數,分小組個數

已知有n個人和m對好友關係 存於陣列r 如果兩個人是直接或間接的好友 好友的好友的好友 則認為他們屬於同乙個朋友圈,請寫程式求出這n個人裡一共有多少個朋友圈。假如 n 5 m 3 r 表示有5個人,1和2是好友,2和3是好友,4和5是好友,則1 2 3屬於乙個朋友圈,4 5屬於另乙個朋友圈,結果為2...