最小生成树各类题总结

最近遇到了很多不同的最小生成树套路

n^2条边的最小生成树

这类题主要利用边权的特殊性质,贪心的优化枚举过程
这种贪心必须严格基于MST的性质,不能想当然的猜!
主要应用:一个环上最大的边一定不再最小生成树上

tpye1 xor或者and为边权

按位贪心,可以发现这一位是0/1把点分成两个集合,而集合内或者集合间的边边权差异很大
or还没有想到好的做法,因为or在0/1和1/1间的边边权是一样的

type2 给出边权函数

例题
边权是:|i - j| *D + Ai + Aj
可以证明对于左边和右边的比Ax小的点,只需考虑取得最小值的y和x的连边。用不等式证明x和z的边会被(x,z),(x,y),(y,z)环替换掉
一开始我错误的认为只可能和i的左边和右边的最优解连边,但是这样是错误的
虽然这样n * 2条边可以保证图联通且包含每个点的最优出边,但是最优出边不一定被选为最小生成树!
最小生成树仅考虑每个点连出的权值最小的边是远远不够的,因为这样图会形成很多个联通块,i可能匹配j的同时,j也匹配i

分层图、有向边转化为无向边

2753: [SCOI2012]滑雪与时间胶囊
这道题就是典型的例子
最小树形图是n^2的
但是因为图按高度分层了,就可以按高度排序,层与层之间的边方向确定,同一高度的先做一遍MST缩起来

边在MST上的可能性问题

和网络流结合,一般求调整边权的最小代价

1937: [Shoi2004]Mst 最小生成树
直接把A当成S,B当成T,每条边的权值=max(0,w[i] - wAB + 1)。求最小割就可以了

这类题利用在最小生成树上则在任意环上改变不是最大边
好像还有几道经典题,暂时记不得题号了,待更新

和虚树结合,只考虑k个关键点

3206: [Apio2013]道路费用
这题不用虚树,直接把无关的点用并查集缩起来
然后暴力2^k枚举关键边的存在性,在新图上求MST,如果关键边和已知边成环则更新关键边的权值
因为边权不同,所以树的形态唯一

你可能感兴趣的:(ACM,图论,个人刷题,知识点总结)