1. 程式人生 > >刷題——poj 2377 Bad Cowtractors

刷題——poj 2377 Bad Cowtractors

/*
在n個倉庫間建立網路從1到n,a倉庫跟b倉庫的花費為c
應為倉庫主比較摳門,所以承包業務的人要令倉庫主的花費最大
同時不能形成環,若無法建立網路則輸出-1否則輸出最大費用
最小生成樹改成最大生成樹做


*/
#include <stdio.h>
#include <algorithm>
using namespace std;


struct GR
{
    int u,v,w;
};


GR G[21000];
int n,m,rt[1100];


bool cmp(GR a,GR b)
{
    return a.w>b.w;
}


void init()
{
    for(int i=1;i<=n;i++)
    {
        rt[i]=i;
    }
}


int find(int x)
{
    if(x!=rt[x])
    {
        rt[x]=find(rt[x]);
    }


    return rt[x];
}


int main()
{
    while(~scanf("%d %d",&n,&m))
    {


        init();


        for(int i=0;i<m;i++)
        {
            scanf("%d %d %d",&G[i].u,&G[i].v,&G[i].w);
        }


        sort(G,G+m,cmp);


        int sum=0,l=1;


        for(int i=0;i<m;i++)
        {
            int a=find(G[i].u);
            int b=find(G[i].v);


            if(a!=b)
            {
                sum+=G[i].w;
                rt[a]=b;
                l++;
            }
        }


        if(l!=n)
        {
            sum=-1;
        }


        printf("%d\n",sum);
    }
    return 0;
}