zoukankan      html  css  js  c++  java
  • 最小生成树之kruskal

    #include<cstdio>
    struct type{int x,y,z;} node[100000],me;
    int f[100000],n,m;
    void sort(int l,int r)//快排
    {
    int x=l,y=r,k;
    k=node[(l+r)/2].z;
    do
    {
    for(;node[x].z<k;x++){};
    for(;node[y].z>k;y--){};
    if (x<=y)
    {me=node[x];node[x]=node[y];node[y]=me;x++;y--;};
    }while(x<y);
    if (x<r) sort(x,r);
    if (l<y) sort(l,y);
    }
    int find(int x)//并查集;
    {
    if (f[x]!=x){ f[x]=find(f[x]);};//找到x的祖先,把它直接附给f[x] ;
    return f[x];//返回x的祖先;
    }
    int main()
    {
    scanf("%d%d",&n,&m);
    for (int i=0;i<m;i++)scanf("%d%d%d",&node[i].x,&node[i].y,&node[i].z);
    sort(0,m-1);//按路程长短排序;
    int x1,x2,y1,y2,j=0,z,b=0;
    long long d=0;
    for (int i=0;i<n;i++) f[i]=i;
    while (b<n-1)//找到当前不相连的结点的,将其长度累加进d;
    {
    x1=find(node[j].x);x2=find(node[j].y);
    if (x1!=x2) {f[x1]=x2;b++;d+=node[j].z; };
    j++;
    }
    printf("%lld",d);
    return 0;
    }

  • 相关阅读:
    排列组合
    动态规划-上台阶
    砝码称重3
    砝码称重2
    砝码称重1
    砝码称重
    TestDirector其他
    TestDirector域或工程用户的管理
    TestDirector创建域或工程
    LoadRunner8 安装步骤
  • 原文地址:https://www.cnblogs.com/qingang/p/5078317.html
Copyright © 2011-2022 走看看