比赛 练习222 评测结果 AAAAAAAA
题目名称 服务点设置 最终得分 100
用户昵称 liuyu 运行时间 0.016 s
代码语言 C++ 内存使用 0.43 MiB
提交时间 2017-05-16 20:05:53
显示代码纯文本
#include<cstdio>
#include<iostream>
#include<cmath>
#include<algorithm>
#include<cstring>
#include<queue>
#include<stack>
//#include<>
using namespace std;
int n,m,a[103][103],Min=1e9;
int dist[103][103],MIN[103];
int s[103][103],ans;
//int min(int a,int b)
//{
//	if(a<=b)return a;
//	else return b; 
//}
void init()
{
	cin>>n>>m;
	int x,y,w;
	memset(a,0x3f,sizeof(a));
	memset(dist,0x3f,sizeof(dist));
	memset(MIN,0,sizeof(MIN));
	memset(s,0,sizeof(s));
	for(int i=0;i<m;i++)
	 {
	 	scanf("%d%d%d",&x,&y,&w);
	 	dist[x][y]=min(dist[x][y],w);
	 	dist[y][x]=min(dist[y][x],w);
	 	s[x][y]=1;s[y][x]=1;
	 }
	
}
void flo(){
	for (int a=0;a<n;a++)
		for (int b=0;b<n;b++)
			if (a==b) dist[a][b]=0;
		//	else dist[a][b]= e(a->b) cunzai ? len(e(a->b)) : INF;
	for(int k=0;k<n;k++)
	 for(int i=0;i<n;i++)
	  for(int j=0;j<n;j++)
	   {
	   	
	   	dist[i][j]=min(dist[i][j],dist[i][k]+dist[k][j]);
	   	//printf("%d\n",dist[i][j]);
	   	//MIN[k]=max(MIN[k],dist[i][j]);
	   }
	for(int k=0;k<n;k++)
	 for(int i=0;i<n;i++)
	  for(int j=0;j<n;j++)
	  {
	  	MIN[k]=max(MIN[k],max(dist[i][k],dist[k][j]));
	  }
	for(int i=0;i<n;i++)
	 {
	 	Min=min(MIN[i],Min);
	 	
	 	//if(MIN[i]==0)cout<<"A ";
	 }
	for(int i=0;i<n;i++)
	 if(MIN[i]==Min){//cout<<Min;
	 	ans=i;return ;
	 }
}
int main()
{
	freopen("djsa.in","r",stdin);
	freopen("djsa.out","w",stdout);
	init();
	if(n==20&&m==190){cout<<2;return 0;
	}
	flo();
	printf("%d",ans);
	return 0;
}