Xor-MST
这道题其实是一种最小生成树算法名曰 Boruvka
的算法,但是平时还是 Kruskal
算法用的说,相信大家也是由它想起的。
根据套路,由于要求的是异或边权之和的最小值,果断构建 01 trie
。我们将样例画出来
我们可以对这颗树进行 dfs
,可以看出两个点的 LCA
越深,那么它们合并代价就越小。上图中,先合并 \(2,3\),再将 \([1],[2,3]\) 合并(需要让 \(1\) 在右子树中走,尽量走某一位和自己一样的)。右边则是合并 \(4,5\),最后是 \([1,2,3],[4,5]\)。根据合并过程可知,如果一个点有两个儿子,当它回溯时,可以立即合并它的两个儿子。这里我们可以用启发式合并,尽量让左右儿子中子树更小者在另一边子树中探索,尽量往与自己一样的地方走。
复杂度暂时未知。