次小生成树:
可以用Prim算法先把i点到j点的最大边权值和最小生成树的权值求出来,再对最小生成树加边cost[i][j],这样成了一个环,然后把i到j的最大边减掉,这样得到的树的权值除最小生成树以外最小,即cMst = min(cMst,(Mst+cost[i][j]-Ma[i][j]));
也可用Kruskal算法先计算一遍最小生成树并把其上的边标记,然后枚举每条被标记的边,去掉这条边再求一次Kruskal,然后恢复,求min值,就可得到次小生成树的权值。
最小树形图:
该算法主要拿来解决最小有向生成树
最小有向生成树:给定一个有向带权图G和其中一个点u,找出一个以u为跟结点,权和最小的有向生成树。有向生成树也叫树形图,是指一个类似树的有向图,满足以下条件:
1.恰好有一个入度为0的点,称为根结点
2.其他结点的入度均为1
3.可以从根结点到达其他结点
算法的过程如下:
1.找到除了root以为其他点的权值最小的入边。用In[i]记录
2.如果出现除了root以外存在其他孤立的点,则不存在最小树形图。
3.找到图中所有的环,并对环进行缩点,重新编号。
4.更新其他点到环上的点的距离
5.重复3,4直到没有环为止。
最小生成树计数:
先建立矩阵Matrix-tree定理:
该矩阵的行列式的值det即为这个图最小生成树的个数。