题意简述:
给一个图,求一个点,该点离其他点最小距离的最大值 最小。
输入样例:
6 11
3 4 70
1 2 1
5 4 50
2 6 50
5 6 60
1 3 70
4 6 60
3 6 80
5 1 100
2 4 60
5 2 80
输出样例:
4 70
注意:0x3f不能写在判断里面,ex:if(x==0x3f)
代码:
#include<iostream>
#include<cstring>
using namespace std;
const int N=110;
int d[N][N];
int main(){
int n,m; cin>>n>>m;
memset(d,0x3f,sizeof(d));
for(int i=1;i<=n;i++)d[i][i]=0;
for(int i=0;i<m;i++){
int x,y,w; scanf("%d%d%d",&x,&y,&w);
d[x][y]=w,d[y][x]=w;
}
for(int k=1;k<=n;k++)
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
d[i][j]=min(d[i][j],d[i][k]+d[k][j]);
int num,ans=1e9;
for(int i=1;i<=n;i++){
int tp=d[i][1];
for(int j=2;j<=n;j++){
tp=max(tp,d[i][j]);
}
// printf("tp %d\n",tp);
// if(tp==0x3f)
if(tp>1e8){
cout<<"0"; return 0;
}
if(ans>tp) ans=tp,num=i;
}
printf("%d %d",num,ans);
return 0;
}