比赛 20101224 评测结果 AAAAAAAAAA
题目名称 最佳地点 最终得分 100
用户昵称 magic 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2010-12-24 20:09:40
显示代码纯文本
#include<fstream>
using namespace std;
   ifstream fi("bestspot.in");
   ofstream fo("bestspot.out");
   int p,f,c,f_i,a,b,cc,ans;
   long ans1,sum;
   int ss[501][501],dat[501];
int main()
{  int k,i,j;
   fi>>p>>f>>c;
   memset(ss,-1,sizeof(ss));
   memset(dat,0,sizeof(dat));
   for (k=1;k<=f;k++)
   {
	   fi>>f_i;
	   dat[k]=f_i;
   }
   for (k=1;k<=c;k++)
   {
	   fi>>a>>b>>cc;
	   ss[a][b]=cc;
	   ss[b][a]=cc;
   }
   
   for (k=1;k<=p;k++)
   {
	   for (i=1;i<=p;i++)
	   {
		   for (j=1;j<=p;j++)
		   {
		    if ((ss[i][k]>0)&&(ss[k][j]>0)&&((ss[i][j]==-1)||(ss[i][j]>ss[i][k]+ss[k][j]))&&(i!=j))
				ss[i][j]=ss[i][k]+ss[k][j];
		   }
	   }
   }
//	for (i=1;i<=p;i++)
//	{
//	   for (j=1;j<=p;j++)
//	   {
//	     fo<<ss[i][j]<<' ';
//	   }
//	   fo<<endl;
//	}
	ans=0;ans1=10000000;
	for (k=p;k>=1;k--)
	{   sum=0;
		for (i=1;i<=f;i++)
		{
		 sum+=ss[k][dat[i]];
		 if (ss[k][dat[i]]==-1) sum++;
		
		}
		 if (ans1>=sum)
		  {
			 ans=k;
			 ans1=sum;
		  }
		//fo<<k<<' '<<sum<<endl;
	}
	
	
	
	
	
	
	
	
	fo<<ans;//<<' '<<ans1;
	
return 0;
}