zoukankan      html  css  js  c++  java
  • Kruskal基础最小生成树

    http://acm.hdu.edu.cn/showproblem.php?pid=1863

    #include<stdio.h>
    #include<string.h>
    #include<algorithm>
    using namespace std;
    int f[105];
    typedef struct
    {
        int x,y,w;
    }Edge;
    Edge edge[5000];
    int find(int x)
    {
        if(f[x]!=x)
            f[x]=find(f[x]);
        return f[x];
    }
    int cmp(Edge a,Edge b)
    {
        return a.w<b.w?1:0;
    }
    int kruskal(int x)
    {
        int sum=0;
        for(int i=1;i<=x;i++)
        {
            int f1=find(edge[i].x);
            int f2=find(edge[i].y);
            if(f1!=f2)
            {
                f[f1]=f2;
                sum+=edge[i].w;
            }
        }
        return sum;
    }
    int main()
    {
        //freopen("in.txt","r",stdin);
        int n,m;
        while(scanf("%d%d",&n,&m)!=EOF)
        {
            if(n==0)  break;
            for(int i=1;i<=m;i++)
                f[i]=i;
            for(int i=1;i<=n;i++)
                scanf("%d%d%d",&edge[i].x,&edge[i].y,&edge[i].w);
            sort(edge+1,edge+n+1,cmp);
            int ans=kruskal(n);
            int cnt=0;
            for(int i=1;i<=m;i++)
                if(f[i]==i)
                cnt++;
            if(cnt>1)
                printf("?
    ");
            else
                printf("%d
    ",ans);
        }
        return 0;
    }
  • 相关阅读:
    HashMap 和HashTable
    两种方式获得键盘录入
    打印流 printStream
    对象操作流--存储对象
    内存输出流
    序列流
    装饰设计模式
    递归
    IO流(使用指定的码表读写字符)
    IO-字符流 练习
  • 原文地址:https://www.cnblogs.com/lyf123456/p/3618886.html
Copyright © 2011-2022 走看看