您的位置:首页 > 其它

Hud 2122[Ice_cream’s world III Kruscal]

2013-10-01 14:42 253 查看
题目链接:怒点

/*
  1211 Ice_cream’s world III
  基础最小生成树 Krusca过的.
*/
#include<cstdio>
#include<algorithm>
using namespace std;
const int N=1005;
const int M=10005;
int father
,n,m;
struct Rode
{
    int xpoint,ypoint;
    int lenth;
}rode[M];
bool cmp(Rode a,Rode b)
{
    if(a.lenth<b.lenth) return true;
    return false;
}
void Init()
{
    for(int i=0;i<n;i++)
    father[i]=i;
}
int Find_Father(int x)
{
    if(x!=father[x])
    father[x]=Find_Father(father[x]);
    return father[x];
}
int Kruscal()
{
    int min=0;
    Init();
    sort(rode,rode+m,cmp);
    for(int i=0;i<m;i++)
    {
        int a=Find_Father(rode[i].xpoint);
        int b=Find_Father(rode[i].ypoint);
        if(a!=b)
        {
            father[a]=b;
            min+=rode[i].lenth;
        }
    }
    int k,tmp=Find_Father(0);
//    printf("(%d)\n",tmp);
    for(k=1;k<n;k++)
    {
//        printf("%d ",Find_Father(k));
        if(Find_Father(k)!=tmp) break;
    }
    if(k==n) return min;
    else return -1;
}
int main()
{
    while(scanf("%d%d",&n,&m)!=EOF)
    {
        for(int i=0;i<m;i++)
        scanf("%d%d%d",&rode[i].xpoint,&rode[i].ypoint,&rode[i].lenth);
        if(m<n-1) printf("impossible\n");
        else{
            int flag=Kruscal();
            if(flag!=-1)
            printf("%d\n",flag);
            else printf("impossible\n");
        }
        printf("\n");
    }
    return 0;
}

以后要用primA他,先放了你。嘎嘎


这次同样错了好多次,但是都是细节上错了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: