poj Agri-Net

最小生成树,裸题

#include"stdio.h"

#include"stdlib.h"



int r[105],n,p;





struct nod

{

    int x,y;

    int len;

}w[10005];



int cmp(const void *a,const void *b)

{

    nod *aa=(nod*)a,*bb=(nod*)b;

    return aa->len-bb->len;

}





int find(int x)

{

    while(x!=r[x])

        x=r[x];

    return x;

}



void input()

{

    int i,j;

    p=0;

    for(i=1;i<=n;i++)

        for(j=1;j<=n;j++)

        {

            scanf("%d",&w[p].len);

            w[p].x=i;w[p].y=j;

            p++;

        }

}



int cal()

{

    int sum=0,i,a,b;

    for(i=0;i<=n;i++)

        r[i]=i;

    qsort(w,p,sizeof(nod),cmp);

    for(i=0;i<p;i++)

    {

        a=find(w[i].x);

        b=find(w[i].y);

        if(a!=b)

        {

            sum+=w[i].len;

            r[b]=a;

        }

    }

    return sum;

}



int main( )

{

    while(~scanf("%d",&n))

    {

        input();

        printf("%d\n",cal());

    }

    return 0;

}

你可能感兴趣的:(poj)