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

生成树模板

时间:2018-03-18 13:52:25      阅读:127      评论:0      收藏:0      [点我收藏+]

标签:span   时间   isp   opera   continue   log   tor   return   one   

如果某条边是跨越集合且边权最小的边,那么所有最小生成树一定经过它,

而回路上边权最大的边,所有最小生成树一定不经过它。

最小生成树有Prim算法,适用于稠密图,时间复杂度O(n^2)(优化后O(nlogn),不如Kruskal方便)。

下面是Kruskal算法模板:

技术分享图片
bool operator <(rec a,rec b){
    return a.z<b.z;
}

IN int get(int x){
    if(x==fa[x]) return x;
    return fa[x]=get(fa[x]);
}

int main(){
    int n,m,ans=0,cnt=0;
    scanf("%d %d",&n,&m);
    REP(i,1,m)
        scanf("%d %d %d",&edge[i].x,&edge[i].y,&edge[i].z);
    sort(edge+1,edge+1+m);
    REP(i,1,n) fa[i]=i;
    REP(i,1,m){
        int x=get(edge[i].x),y=get(edge[i].y);
        if(x==y) continue;
        fa[x]=y;
        ans+=edge[i].z;
        cnt++;
        if(cnt==n-1) break;
    }
    if(cnt!=n-1) printf("orz");
    else printf("%d",ans);
View Code

 

次小生成树:(待完善)

 

最小树形图:(朱刘算法)

1.找到除了root以为其他点的权值最小的入边。用In[i]记录 
2.如果出现除了root以为存在其他孤立的点,则不存在最小树形图。 
3.找到图中所有的环,并对环进行缩点,重新编号。 
4.更新其他点到环上的点的距离 
5.重复3,4直到没有环为止

(待完善)

 

生成树模板

标签:span   时间   isp   opera   continue   log   tor   return   one   

原文地址:https://www.cnblogs.com/EvfX/p/8595115.html

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