生成树模板

Posted evfx

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了生成树模板相关的知识,希望对你有一定的参考价值。

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

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

最小生成树有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直到没有环为止

(待完善)

 





以上是关于生成树模板的主要内容,如果未能解决你的问题,请参考以下文章

vscode 用户代码片段 vue初始化模板 Snippet #新加入开头注释 自动生成文件名 开发日期时间等内容

前端开发工具vscode如何快速生成代码片段

前端开发工具vscode如何快速生成代码片段

最小生成树详解 prim+ kruskal代码模板

CodeSmith 多模板按目录树批量自动生成代码

vs 2010代码片段