• POJ2387 Til the Cows Come Home (Kruscal)


    题目链接>>>

    题目大意:

    谷仓之间有一些路径长度,然后要在这些谷仓之间建立一些互联网,花费的成本与长度成正比,,并且要使这些边连起来看的像一课“树”,然后使成本最大

    解题思路:

    最大生成树
    用kruskal在最小生成树的基础上,将排序从大到小排序,这样就是一个最大生成树了

    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    using namespace std;
    
    struct EDGE{
        int x,y;
        long long c;
    }edge[30000];
    int father[1010];
    int n,m;
    
    bool cmp(EDGE a,EDGE b){
        return a.c>b.c;
    }
    int find(int x){
        if(father[x]==x)return x;
        father[x]=find(father[x]);
        return father[x];
    }
    void Kruskal(){
        long long sum=0,s=0;
        sort(edge+1,edge+1+m,cmp);
        for(int i=1;i<=m;i++){
            int f1=find(edge[i].x);
            int f2=find(edge[i].y);
            if(f1!=f2){
                father[f2]=f1;
                sum+=edge[i].c;
                s++;
            }    
            if(s==n-1)break;
        }
        if(s==n-1)printf("%lld
    ",sum);
        else printf("-1
    ");
    }
    int main(){
        while(scanf("%d%d",&n,&m)!=EOF){
            for(int i=1;i<=n;i++)father[i]=i;
            for(int i=1;i<=m;i++){
                scanf("%d%d%d",&edge[i].x,&edge[i].y,&edge[i].c);
            }
            Kruskal();
        }
        return 0;
    }

    2018-04-01


    作者:is_ok
    出处:http://www.cnblogs.com/00isok/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    org.mybatis.spring.mapper.MapperScannerConfigurer$Scanner$1
    LayoutInflater
    发现javax.xml.parsers.SAXParser有bug
    startActivityForResult and onActivityResult
    Sub Thread to update main Thread (UI) 2
    Sub Thread to update main Thread (UI)
    打算听的歌
    会话状态Session
    HttpResponse类
    HttpRequest类
  • 原文地址:https://www.cnblogs.com/00isok/p/8687812.html
Copyright © 2020-2023  润新知