POJ1258——Agri-Net(最小生成树)

裸最小生成树


#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
using namespace std;
int ans,f[110],o;
struct road
{
    int u,v,w;
}e[5100];
bool cmp(road x,road y)
{
    return x.w<y.w;
}
int find(int x)
{
    return f[x]==x? x:f[x]=find(f[x]);
}
void Union_set(int x,int y,int w)
{
    if(x==y) return;
    else{
        f[x]=y;
        ans+=w;
    }
}
int main()
{
    int n,i,j,temp;
    while(~scanf("%d",&n))
    {
        ans=o=0;
        for(i=0;i<n;i++)
        {
            f[i]=i;
            for(j=0;j<n;j++)
            {
                scanf("%d",&temp);
                if(i<j)
                {
                    e[o].u=i;
                    e[o].v=j;
                    e[o].w=temp;
                    o++;
                }
            }
        }
        sort(e,e+o,cmp);
        for(i=0;i<o;i++)
        {
            Union_set(find(e[i].u),find(e[i].v),e[i].w);
        }
        printf("%d\n",ans);

    }
    return  0;
}


你可能感兴趣的:(POJ1258——Agri-Net(最小生成树))