比赛 HAOI2009 模拟试题3 评测结果 AAAAA
题目名称 医院设置 最终得分 100
用户昵称 Citron酱 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2012-06-28 17:18:48
显示代码纯文本
#include <cstdio>
#include <climits>

#define I_F "hospital.in"
#define O_F "hospital.out"

const short MAXn=100;

short n;
int s[MAXn];
short map[MAXn][MAXn]={{0}};
long ans=LONG_MAX;

void Input();
void Floyd();
void Search();
void Output();

int main()
{
	Input();
	Floyd();
	Search();
	Output();
	return 0;
}

void Input()
{
	short t;
	freopen(I_F,"r",stdin);
	scanf("%hd",&n);
	for (short i=0; i<n; ++i)
	{
		scanf("%d%hd",&s[i],&t);
		if (t>0)
			map[i][t-1]=map[t-1][i]=1;
		scanf("%hd",&t);
		if (t>0)
			map[i][t-1]=map[t-1][i]=1;
	}
}

void Floyd()
{
	for (int k=0; k<n; ++k)
		for (int i=0; i<n; ++i)
			if (map[i][k]>0)
				for (int j=0; j<n; ++j)
					if (map[k][j]>0 && i!=j && map[i][j]==0)
						map[i][j]=map[i][k]+map[k][j];
}

void Search()
{
	long t;
	for (int i=0; i<n; ++i)
	{
		t=0;
		for (int j=0; j<n; ++j)
			t+=s[j]*map[j][i];
		ans=(ans<t)?ans:t;
	}
}

void Output()
{
	freopen(O_F,"w",stdout);
	printf("%ld\n",ans);
}