比赛 |
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();
}