码迷,mamicode.com
首页 > 其他好文 > 详细

长乐集训合集

时间:2019-10-08 12:29:56      阅读:122      评论:0      收藏:0      [点我收藏+]

标签:枚举   ==   连通   log   限制   差值   添加   生成   需要   

## 最小差值生成树

题目保证一定有生成树,并且图是联通的,那么我们只需要加一些限制条件枚举最小生成树即可.;

按边从小到大排序,然后从最小边开始枚举,暴力尝试添加每一条边,期望时间复杂度 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);
    }
}

长乐集训合集

标签:枚举   ==   连通   log   限制   差值   添加   生成   需要   

原文地址:https://www.cnblogs.com/sjsjsj-minus-Si/p/11634664.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!