並查集堆 Trie樹

2021-10-14 05:55:09 字數 846 閱讀 4309

功能:在近乎o(1)的時間複雜度內完成:

將兩個集合合併;

詢問兩個元素是否在乙個集合中。

基本原理:

每乙個集合用樹(不一定是二叉樹)表示。

根節點編號為集合編號。

每個結點x儲存父結點p[x]。

基本操作:

if (p[x] == x)//判斷樹根

while (p[x] != x) x=p[x];//求x的集合編號

p[x]=y//合併兩個集合

(p[x] - 集合x編號,p[y] - 集合y編號)

優化:搜過後直接把路徑上所有結點直接指向根節點。

核心:

int

find

(int x)

特點:

實現刪除修改任意元素(stl無法直接實現)

用於dijkstra演算法

操作:插入乙個數

求集合中最小值

刪除最小值

刪除任意元素

修改任意元素

基本結構:

完全二叉樹

儲存:一維陣列

建堆:for (int i = n/2 ;i ;i --) down(i);

時間複雜度:o(n)

功能:快速高效儲存和查詢字串集合。

構造:字串中從前向後查詢每一位是否是樹的結點,不是則建立。

每個串結尾打標記。

特點:題目中一定限制了字母種類,最多52+10數字;

種類特別多(例如漢字)時,用二進位制位存。

1.7小結

POJ 2513 Trie樹 尤拉迴路 並查集

1.把木棒的端點考慮為頂點,木棒考慮為邊,建立起乙個無向圖。2.問題轉化為在無向圖上判斷是否有尤拉迴路或者尤拉道路。3.在無向圖上判斷是否有尤拉迴路或者尤拉道路 尤拉定理 並查集 判斷連通性 4.考慮如何統計每個頂點的度,開始用的是暴力解法,直接用陣列記錄頂點,並且通過順序查詢獲得頂點編號,tle,...

POJ 2513 TRIE樹 並查集 尤拉路

題意 給定許多根木棒,兩邊分別塗有不同顏色,問能否將他們連成一條直線。規定只能將相同顏色的兩端相連。思路 用trie樹儲存單詞,trie樹最後乙個字母的節點編號就是這個單詞的編號 可以和模擬 並查集檢查是否連通 有尤拉路的前提是圖連通 最後加上無向圖尤拉路的判定就好了 奇數度的節點只能有0或2個 v...

並查集 並查集

本文參考了 挑戰程式設計競賽 和jennica的github題解 陣列版 int parent max n int rank max n void init int n int find int x else void union int x,int y else 結構體版 struct node ...