## 最小差值生成树
题目保证一定有生成树,并且图是联通的,那么我们只需要加一些限制条件枚举最小生成树即可.;
按边从小到大排序,然后从最小边开始枚举,暴力尝试添加每一条边,期望时间复杂度
O(M^2logN)
.
inline void kruskal(){
sort(e+1,e+m+1);
rep(i,1,m){
makeset(n);//对于每条最小边都做一次最小生成树。
int cnt=1;
fa[e[i].u]=e[i].v;
int maxv=e[i].w;
rep(j,i+1,m){
int fu=find(e[j].u),fv=find(e[j].v);
if(fu==fv)continue;
fa[fu]=fv;
maxv=max(maxv,e[j].w);
if(++cnt==n-1)break;
}
if(cnt==n-1)//这里一定要判一下是不是==n-1,因为可能图不连通
ans=min(ans,maxv-e[i].w);
}
}