标签:
| Time Limit: 1000MS | Memory Limit: 65536K | |
| Total Submissions: 21315 | Accepted: 9822 | 
Description
Input
Output
Sample Input
1 3 0 990 692 990 0 179 692 179 0
Sample Output
692
最小生成树的计算,非常高兴。第一次写这样的题。一遍A。
AC代码例如以下:
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
struct H
{
    int l,r,le;
}map[300000];
int f[505];
int find(int a)
{
    return f[a]==a ? f[a] :find (f[a]);
}
bool cmp(H a,H b)
{
    return a.le<b.le;
}
int main()
{
    int t;
    int n;
    int i,j;
    int a,tt;
    scanf("%d",&t);
    while(t--)
    {
        tt=0;
        scanf("%d",&n);
        for(i=1;i<=n;i++)
            f[i]=i;
        for(i=1;i<=n;i++)
            for(j=1;j<=n;j++)
        {
            scanf("%d",&a);
            if(j<=i)
            {
                map[tt].l=i;
                map[tt].r=j;
                map[tt].le=a;
                tt++;//统计边权和端点
            }
        }
        sort(map,map+tt,cmp);
        int ans=0,max=0;
        for(i=0;i<tt;i++)
        {
            int xx,yy;
            xx=find(map[i].l);
            yy=find(map[i].r);//并查集
            if(xx!=yy)
            {
                f[xx]=yy;
                ans+=map[i].le;
                if(max<map[i].le)
                    max=map[i].le;//找到最大的一段
            }
        }
        printf("%d\n",max);
    }
    return 0;
}
版权声明:本文博客原创文章。博客,未经同意,不得转载。
标签:
原文地址:http://www.cnblogs.com/bhlsheji/p/4735920.html