並查集深入淺出

2021-09-12 04:00:19 字數 1062 閱讀 6265

針對雜湊點的集合操作,將哪些點集合到一起,判定哪些點在乙個集合是並查集的基本任務。

缺點:對於每乙個集合,只有乙個「群主」,其他的都是 「群員」,群員之間沒有層級之分。

對於每乙個點 i 判定給定乙個 pre[ i ];若兩個點的 pre[ i ] 相等則屬於乙個集合,其中 pre[ i ] = i 的點為「群主」。除此之外,若有 pre[ i ] = pre[ pre[ j ] ],形成類似鏈式關係 , 則遞迴查詢時將 pre[ j ] = pre[ i ],將子點全都歸於「群主」 。 

注意:為了精確的找到某個群員的群主,並且將群員的 pre 全都對齊於群主,我們一般採用 find( i ) 代替 pre[ i ]

對於每乙個點,它乙個人屬於乙個集合,它是它自己的「群主」。

void init()

}

對於每乙個點,遞迴查詢它的 pre[  ] , 直到最後滿足 pre[ i ]  = i

int find(int x)

void union(int x,int y)

almost union-find,並查集+刪除節點

在並查集中刪除乙個節點是很麻煩的事情,所以我們引入乙個新的東西,用 id[ i ] 代替原有的 i 進行並查集操作,如果有乙個點我們想把它從某乙個集合中拿出來,就重新給 i 定義乙個新的 id[ i ]並將它的狀態初始化,一般用(++n)。

#includeusing namespace std;

const int maxn = 1e6+10;

int pre[maxn],id[maxn],num[maxn],sum[maxn];

int n,m;

void init()

}int find(int x)

void union(int x,int y)

int main()

else if(op==2)

}else if(op==3)}}

return 0;

}

深入淺出解讀並思考AlphaGo

隨機選擇前面某個迭代週期得到的sl網路,然後使用當前的rl策略網路和其對弈,目標是戰勝選擇的sl網路。隨機的從一系列不同迭代週期的監督學習策略網路p 中選擇對手是為了防止過擬合。在前面的思考中提過,我們之前完全沒考慮到棋局的勝負。所以這裡將棋局和棋局的勝負都考慮進來,用強化學習演算法poliicy ...

深入淺出sizeof

int佔 位元組,short佔 位元組 1.0 回答下列問題 答案在文章末尾 1.sizeof char 2.sizeof a 3.sizeof a 4.strlen a 如果你答對了全部四道題,那麼你可以不用細看下面關於sizeof的論述。如果你答錯了部分題目,那麼就跟著我來一起 關於sizeof...

深入淺出ShellExecute

ipconfig c log.txt應如何處理?二樓的朋友,開啟拔號網路這樣 shellexecute null,open c windows rundll32.exe shell32.dll,control rundll c windows system telephon.cpl null,sw ...