最小树形图
最小树形图
概念:在一个给定边的有向图中,求以一个点为根的生成树,换句话说这个图中只有一个点入度为0,其余点入度均为1,且在此基础上进行约束,如要求边权和最小等
首先,在最小树形图中一般要以弧的形式存图,并保存一个点的前驱
主体就是朱刘算法,分4个步骤
1.求最短弧集合
2.判断集合中是否有环,具体就是自己成为自己的祖先,从当前结点一直染色,直到染到根或自己
3.若有环,缩点,重新求最短弧集合
4.统计结果输出
比较重要的就是缩点时的操作,据说可以用tarjan优化,日后学会了再补上
类似于并查集的思想,记录每个集合中的代表结点,并对所有弧进行一次修改
关键在于处理好改权值的问题,将每个点在环外入边的权值减去环内入边的权值,同时保留每次的统计和,只计算增量
——2020.5.11
最重要的步骤也是最容易写错的步骤还是最后一步的减边权了,用更好理解的话说,如果一个点位于环内,一个点位于环外,那么就要将环外的点到环内的点的费用减掉环内最小的费用,也就相当于删除指向环内的点的边 而从环外点指向环内
不定根最小树形图
类似于大部分图论算法,利用虚拟源点来处理不定根问题
统计所有边权和,建立虚拟源点,并向原图中每个点连一条大于sum的边,避免对结果产生影响
原图中的根就是直接与虚拟源点相邻的点,可以在松弛时统计出来
例题:http://acm.hdu.edu.cn/showproblem.php?pid=2121
——2020.5.21