标签:
| 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