记录编号 |
22813 |
评测结果 |
AAAAAAAAAA |
题目名称 |
最佳地点 |
最终得分 |
100 |
用户昵称 |
苏轼 |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.397 s |
提交时间 |
2010-12-27 20:06:59 |
内存使用 |
1.22 MiB |
显示代码纯文本
#include <fstream>
using namespace std;
int way[502][502];
void floyd(const int n)
{
int i,j,k;
for (k=1; k<=n; k++)
for (i=1; i<=n; i++)
if (way[i][k])
for (j=1; j<=n; j++)
if (way[k][j] && i!=j &&
(!way[i][j] || way[i][k]+way[k][j]<way[i][j]))
way[i][j]=way[i][k]+way[k][j];
}
int main(void)
{
ifstream fin("bestspot.in");
ofstream fout("bestspot.out");
int p,f,c;
fin>>p>>f>>c;
int fav[502];
for (int i=0; i<f; i++)
fin>>fav[i];
int a,b;
for (int i=0; i<c; i++)
{
fin>>a>>b;
fin>>way[a][b];
way[b][a]=way[a][b];
}
floyd(p);
int minsum=10000000,minans;
for (int i=1; i<=p; i++)
{
int sum=0;
for (int j=0; j<f; j++)
if (way[i][fav[j]] || fav[j]==i)
sum+=way[i][fav[j]];
else
{
sum=10000000;
break;
}
if (sum<minsum)
{
minsum=sum;
minans=i;
}
}
fout<<minans<<endl;
fin.close();
fout.close();
return 0;
}