赞
踩
MST的构造
Boruvka算法常用于解决这类问题:给你n个点,每个点有点权,任意两个点之间有边权,边权为两个点权用过某种计算方式得出,求最小生成树。动图
最小生成树的两个性质:
(1) 不同的最小生成树中,每种权值的边出现的个数是确定的
(2) 不同的生成树中,某一种权值的边连接完成后,形成的联通块状态是一样的
可以用这两个性质做最小生成树计数
令 a , b a,b a,b路径上最长边最短: “最短的最长边”一定在MST上,所以我们求一下MST,再在MST上找 a , b a,b a,b路径上的最长边。
问 n n n个点 m m m条边的无向连通图上任两点的最短距离, m − n m-n m−n很小:随便建一棵生成树,把图看成树上挂几条边 CF1051F The Shortest Statement
trick: 对区间 [ l , r ] [l,r] [l,r]操作 ⇒ \Rightarrow ⇒ 连边 l → r + 1 l\to r+1 l→r+1
Boruvka + 01Trie树
Boruvka算法简介:
对图中所有的点 i i i,找到 i i i连向其它点的最小边,如果这条边还没加进 M S T MST MST,就把它加上。执行完后,把每个连通块缩成点。
不断重复上面的操作,直到只剩下一个连通块。
时间复杂度 O ( ( m + n ) l o g n ) O((m+n)logn) O((m+n)logn)
此题中,要让 a i ⊕ a j a_i \oplus a_j ai⊕aj最小,就让 a i , a j a_i,a_j ai,aj的高位尽量保持相等。
假设我们现在运行Boruvka,并且目前只剩两个连通块,那么设 p p p表示所有的
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。