记录编号 31303 评测结果 AAATTTTTTA
题目名称 通信线路 最终得分 40
用户昵称 GravatarTBK 是否通过 未通过
代码语言 C++ 运行时间 9.004 s
提交时间 2011-11-02 10:22:49 内存使用 0.32 MiB
显示代码纯文本
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <cstring>
using namespace std;
struct fun
{
	int x;
	int y;
	int z;
}f[1501];
int a,b,c,d,l,m,n,r[1501]={0},s;
int Compare(const void *elem1,const void *elem2)
{
	struct fun *elem3=(struct fun *)elem1;
	struct fun *elem4=(struct fun *)elem2;
	return (elem3->x > elem4->x) ?1:-1;
}
int main(void)
{
	freopen("mcst.in","r",stdin);
	freopen("mcst.out","w",stdout);
	scanf("%d",&b);
	l=0;
	for (c=0;c<b;c++)
		for (d=0;d<b;d++)
		{
			scanf("%d",&a);
			if (d<c) continue;
			if (a!=-1) 
			{
				f[l].x=a;
				f[l].y=c;
				f[l].z=d;
				l++;
			}
		}
	qsort(f,l,sizeof(fun),Compare);
	m=1;
	s=f[0].x;
	r[f[0].y]=m;
	r[f[0].z]=m;
	for (c=1;c<l;c++)
	{
		if ((r[f[c].y]==0)&&(r[f[c].z]==0)) 
		{
			m++;
			r[f[c].y]=m;
			r[f[c].z]=m;
			s+=f[c].x;
		}
			else if ((r[f[c].y]==0)&&(r[f[c].z]!=0)) 
				 {
					r[f[c].y]=r[f[c].z];
					s+=f[c].x;
				 }
					else if ((r[f[c].y]!=0)&&(r[f[c].z]==0)) 
						 {
							r[f[c].z]=r[f[c].y];
							s+=f[c].x;
						 }
							else if (r[f[c].y]!=r[f[c].z])
								 {
									n=r[f[c].z];
									for (d=0;d<b;d++)
										if (r[d]==n) r[d]=r[f[c].y];
									s+=f[c].x;
								 }
	}
	printf("%d\n",s);
	fclose(stdin);
	fclose(stdout);
	return(0);
}