容易证明的是,在图的最小生成树中,它的最长边在所有生成树的最长边中也是最短的,所以求所有生成树的最长边的最小值的问题和最小生成树是一个问题。
下边是并查集加最小排队实现的
Kruskal算法。稍微修改下输入格式,在poj上连过了好几道最小生成树的题目。
大致思想:
a:不断的找到最小边,判断此边的两点是否已经连通,若连通则不作为并继续在堆上pop(直到pop出的边的两点所属集合不连通),若不连通则使其连通,并记录此路的代价。
重复a操作n-1次(n为点的个数);
完毕
#include <iostream>
#include <stdio.h>
#include <math.h>
#include <queue>
#include <vector>
#include <algorithm>
#in