1393国防部长
数学上最小生成树的最大边一定是所有生成树中最大边的最小值
#include <bits/stdc++.h>
using namespace std;
int n;
const int N=105;
double x[N];
double y[N];
double cost[N];
double t;
bool vis[N];
double dist[N][N];
int main(){
while(scanf("%d",&n)!=EOF)
{
memset(vis,0,sizeof(vis));
double ans=0;
for(int i=1;i<=n;i++){
scanf("%lf%lf",&x[i],&y[i]);
}
for(int i=1;i<=n;i++){
for(int j=i;j<=n;j++){
dist[i][j]=dist[j][i]=sqrt((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]));
}
}
for(int i=2;i<=n;i++){
cost[i]=dist[1][i];
}
vis[1]=1;
for(int i=2;i<=n;i++){
t=100000000;
int k;
for(int j=2;j<=n;j++){
if(!vis[j]&&t>cost[j]){
t=cost[j];
k=j;
}
}
vis[k]=1;
ans=max(t,ans);
for(int j=2;j<=n;j++){
cost[j]=min(cost[j],dist[k][j]);
}
}
printf("%.2lf\n",ans);
}
}

浙公网安备 33010602011771号