比赛 20101224 评测结果 AAAAAAAAAA
题目名称 最佳地点 最终得分 100
用户昵称 Citron酱 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2010-12-24 20:14:54
显示代码纯文本
#include <fstream>
#include <climits>

#define MAX 500
#define I_F "bestspot.in"
#define O_F "bestspot.out"

using namespace std;

int map[MAX][MAX];
int wants[MAX];
short p,f,ans;

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

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

void Input()
{
	ifstream fin(I_F);
	int c;
	fin>>p>>f>>c;
	int i,a,b;
	for (i=0; i<f; fin>>wants[i++]);
	for (i=0; i<c; i++)
	{
		fin>>a>>b;
		fin>>map[--a][--b];
		map[b][a]=map[a][b];
	}
	fin.close();
}

void Floyd()
{
	short i,j,k;
	for (k=0; k<p; k++)
		for (i=0; i<p; i++)
			for (j=0; j<p; j++)
				if ((i!=j)&&(map[i][k]>0)&&(map[k][j]>0)&&((map[i][j]==0)||(map[i][k]+map[k][j]<map[i][j])))
				{
					map[i][j]=map[i][k]+map[k][j];
					map[j][i]=map[i][j];
				}
}

void Search()
{
	short i,j;
	long t,minn=LONG_MAX;
	for (i=0; i<p; i++)
	{
		t=0;
		for (j=0; j<f; t+=map[i][wants[j++]-1]);
		if (t<minn)
		{
			minn=t;
			ans=i+1;
		}
	}
}

void Output()
{
	ofstream fout(O_F);
	fout<<ans<<'\n';
	fout.close();
}