CF888G XOR MST 最小異或生成樹

2022-02-28 15:36:36 字數 460 閱讀 3184

cf888g

trie上貪心,先左右兩邊連邊,再用一條邊的代價連起左右兩顆樹。因為內部的邊一定比跨兩棵樹的邊權笑,顯然是對的。

**自己瞎yy的。啟發式合併

#include #define ll long long

using namespace std;

const int _=2e5+7;

int n,a[_],ch[_*30][2],siz[_*30],cnt,col,rt[_*30];

ll ans;

std::vectordsr[_*30];

void insert(int x)

return ans;

}void dfs(int p,int dep) else

ans+=tmp;

ch[p][!k]=nb; }}

int main()

最小異或生成樹Xor MST

1.將每個點的權值轉換成二進位制,從高位往低位依次插入01字典樹.2.dfs遍歷該字典樹的每個結點,如果某個結點有兩個子節點,這兩個子節點的子樹分別會構成兩個連通塊,要在這兩個連通塊之間各選乙個點連邊並使它們的異或值最小,通過find函式遞迴處理這個問題.ans還要加上此時產生的二進位制位對應的值....

G Xor MST(異或最小生成樹)

異或最小生成樹,這裡採用了一種分治的方法來貪心求解最值 為什麼這樣是對的 顯然我們分成兩個集合我們可以抵消掉高位的一大堆一樣的東西,這個時候,我們可以保證我們的貪心策略是正確的。為什麼我們要合併兩個集合 假設左邊集合有n nn個點,右邊集合有m mm個點,顯然左邊最多鏈結n 1 n 1 n 1條邊,...

最小異或生成樹學習筆記

最近打的區域賽模擬裡用到了最小異或生成樹 於是進行了一手學習 問題背景 有乙個序列,每個點有乙個權值 a i 取一條邊 i j 的代價是 a i xor a j 問這個圖的最小生成樹的邊權和 前置知識 trie樹 演算法原理 1 bor vka演算法 用於求解最小生成樹 做法 開始時,每個點都是乙個...