BZOJ 3390 Bad Cowtractors牛的报复

Posted on 2016-04-25 22:47  ziliuziliu  阅读(177)  评论(0编辑  收藏  举报

HAHAHA奶牛题。。。。最大生成树。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define maxv 2050
#define maxe 40050
using namespace std;
struct edge
{
    int u,v,w;
}e[maxe];
int n,m,father[maxv],ans=0;
bool cmp(edge x,edge y)
{
    return x.w>y.w;
}
int getfather(int x)
{
    if (x!=father[x])
        father[x]=getfather(father[x]);
    return father[x];
}
void kruskal()
{
    for (int i=1;i<=n;i++) father[i]=i;
    sort(e+1,e+m+1,cmp);
    for (int i=1;i<=m;i++)
    {
        int u=e[i].u,v=e[i].v,w=e[i].w;
        int f1=getfather(u),f2=getfather(v);
        if (f1!=f2) {father[f1]=f2;ans+=w;}
    }
}
bool check()
{
    for (int i=2;i<=n;i++)
    {
        if (getfather(i)!=getfather(i-1))
            return false;
    }
    return true;
}
int main()
{
    scanf("%d%d",&n,&m);
    for (int i=1;i<=m;i++)
        scanf("%d%d%d",&e[i].u,&e[i].v,&e[i].w);
    kruskal();
    if (check()) printf("%d\n",ans);
    else printf("-1\n");
    return 0;
}