生成树

· · 个人记录

概述

最小生成树

Kruskal 算法

il void kruskal(){
    sort(b+1,b+m+1,cmp);
    int fau,fav;
    For(i,1,m){
        fau=find(b[i].u),fav=find(b[i].v);
        if(fau==fav) continue;
        ans+=b[i].w,merge(fau,fav);
    }
    return;
} 

Prim 算法

memset(dis,127,sizeof(dis));
dis[1]=0;
For(i,1,n){
        int c=2139062143,add;
        For(i,1,n)
            if(!in[i])
                if(c>dis[i]) c=dis[i],add=i;
        ans+=c,in[add]=1;
        For(i,1,n)
            if(!in[i])
                dis[i]=min(dis[i],e[add][i]);
    }

次小生成树

Kruskal 重构树