杭电 1233

来源:互联网 发布:淘宝卖纸箱 编辑:程序博客网 时间:2024/05/07 10:32

水题

Kruskal算法

附上代码:

#include<stdio.h>#include<string.h>#include<iostream>#include<algorithm>using namespace std;const int N=10000;int b[N];struct node{    int x;    int y;    int dis;}text[N*N];bool comp(const node x,const node y){    return x.dis<=y.dis;}int findl(int x){    if(x!=b[x])        b[x]=findl(b[x]);    return b[x];}int main(){    int i,j,k,n,m,s,r,sum;    int tx,ty;    while(cin>>n&&n)    {        for(i=0;i<N;i++)        {            b[i]=i;        }        sum=0;        s=n*(n-1)/2;        for(i=0;i<s;i++)        {            cin>>text[i].x>>text[i].y>>text[i].dis;        }        sort(text,text+s,comp);        for(i=0;i<s;i++)        {            tx=findl(text[i].x);            ty=findl(text[i].y);            if(tx!=ty)            {                sum+=text[i].dis;                b[tx]=ty;            }        }        printf("%d\n",sum);    }    return 0;}


0 0