hdu1233最短路问题使用

来源:互联网 发布:javascript php 混合 编辑:程序博客网 时间:2024/06/05 02:39

使用并查集加使用克鲁斯卡尔算法,水体直接解;

#include<stdio.h>#include<algorithm>using namespace std;int bin[5005];struct In{    int p1,p2;    int v;    }s[5005];bool compare(In a,In b){    return a.v < b.v;}int findx(int x){    int r=x;    if(bin[r]!=r) bin[r]=findx(bin[r]);    return bin[r];}int merge(int a,int b){    int fx,fy;    fx=findx(a);    fy=findx(b);    if(fx==fy) return 1;    else {        if(fx<fy) bin[fx]=fy;        else bin[fy]=fx;        return 0;    }}int main(){    int i,n,c1,c2,c3,c4,sum;    while(scanf("%d",&n)&&n!=0)    {        sum=0;        n=n*(n-1)/2;        for(i=0;i<5005;i++) bin[i]=i;        for(i=0;i<n;i++)        {            scanf("%d%d%d",&c1,&c2,&c3);            s[i].p1=c1;            s[i].p2=c2;            s[i].v=c3;        }        sort(s,s+n,compare);        for(i=0;i<n;i++)        {            if(merge(s[i].p1,s[i].p2)==0) sum+=s[i].v;        }        printf("%d\n",sum);    }    }
0 0
原创粉丝点击