POJ2485——Highways(最小生成树)

来源:互联网 发布:泰豪软件 编辑:程序博客网 时间:2024/05/02 01:03

Kruskal算法


#include<iostream>#include<cstring>#include<algorithm>#include<cstdio>using namespace std;const int MAX=510;const int A=MAX*MAX/2;int ans;struct node{    int u,v,w;}e[A];int f[MAX];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)    {        f[x]=y;        ans=w;    }}bool cmp(node x,node y){    return x.w<y.w;}int main(){    int k,i,j,n,o,temp;    scanf("%d",&k);    while(k--)    {        scanf("%d",&n);        ans=o=0;        for(i = 0;i < n;i++)        {            f[i] = i;  //初始化集合            for(j = 0;j < n;j++)            {                if(i < j)                {                    e[o].u = i;                    e[o].v = j;                    scanf("%d",&e[o].w);                    o++;                }                else                    scanf("%d",&temp);            }        }        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;}


0 0