题意:找到一条可以链接所有点的路,这条路的的最大的边的权值小于等于其他路的最大边的权值
AC代码:
#include <iostream> #include<stdio.h> #include<stdlib.h> #include<algorithm> #include<string.h> #define MAX 1<<30; #include<cmath> #include<iomanip> using namespace std; struct node { int x; int y; }z[300]; int a,b,c,l,m,n,h,e; bool biao[300]; double d[300]; double p[300][300]; double ro(node b,node c) { return sqrt((double)((b.x-c.x)*(b.x-c.x)+(b.y-c.y)*(b.y-c.y))); } void dk() { memset(biao,0,sizeof(biao)); for(int i = 0; i<a; i++) d[i] =MAX; d[0]=0; for(int i = 0; i<a; i++) { double minn = MAX; int pos; for(int j = 0; j<a; j++) { if(d[j]<minn && !biao[j]) { pos = j; minn = d[j]; } } biao[pos] = 1; for(int j = 0; j<a; j++) { d[j]=min(d[j],max(d[pos],p[pos][j])); } } } int main() { int o=1; while(~scanf("%d",&a)&&a) { for(int i=0;i<a;i++) cin>>z[i].x>>z[i].y; for(int i=0;i<a;i++) { for(int j=i+1;j<a;j++) { p[i][j]=p[j][i]=ro(z[i],z[j]); } } dk(); printf("Scenario #%d\n",o); printf("Frog Distance = %.3lf\n",d[1]); printf("\n"); o++; } return 0; }