UVa 10803 Thunder Mountain (任意两点最短路的最大值+Floyd)

来源:互联网 发布:淘宝开店规则大全2017 编辑:程序博客网 时间:2024/06/05 04:21

ans ∗ 1e+4− ⌊ans ∗ 1e+4⌋ − 0.5| > 1e−2

题意:给出n个点的坐标,要求n个点每两点之间的最大距离。若这n个点,有不连通的地方,则输出Send Kurdy。

<span style="font-size:18px;">#include<cstdio>#include<cmath>#include<algorithm>#include<iostream>#include<climits>#include<cstring>#include<string>#include<set>#include<map>#include<queue>#include<vector>using namespace std;const double INF=100000000.0;const double eps=1e-8;const int maxn=101+10;struct Point{double x,y;Point(double x=0.0,double y=0.0):x(x),y(y){}};Point point[maxn];double d[maxn][maxn];int n;void Floyd(){for(int k=0;k<n;k++)for(int i=0;i<n;i++)for(int j=0;j<n;j++){d[i][j]=min(d[i][j],d[i][k]+d[k][j]);}}int main(){int t=1;int test;scanf("%d",&test);while(test--){scanf("%d",&n);for(int i=0;i<n;i++){scanf("%lf%lf",&point[i].x,&point[i].y);}for(int i=0;i<n;i++)for(int j=0;j<n;j++){if(i==j)d[i][j]=0;else d[i][j]=INF;}for(int i=0;i<n;i++)for(int j=i+1;j<n;j++){double temp=sqrt((point[i].x-point[j].x)*(point[i].x-point[j].x)+(point[i].y-point[j].y)*(point[i].y-point[j].y));if(temp<=10.0)d[i][j]=d[j][i]=temp;}Floyd();int flag=1;double temp=0.0;for(int i=0;i<n;i++)for(int j=0;j<n;j++){if(INF-d[i][j]<eps){flag=0;break;}temp=max(temp,d[i][j]);}printf("Case #%d:\n",t++);if(flag==0)printf("Send Kurdy\n\n");else printf("%.4lf\n\n",temp);}return 0;}</span>




0 0