[BZOJ3389]信号连接

来源:互联网 发布:mysql 5.7.20安装教程 编辑:程序博客网 时间:2024/05/01 12:23
题目描述


输入


输出


样例输入
4 25
0 0
6 8
12 0

14 0


样例输出

5.00000000


数据规模
n≤100
精度要求1e-6,建议保留8位输出

来源 by azui



题解:

不存在可行方案即两点中最长的距离r>T。

存在可行方案:二分两点中最长的距离r,用Floyd检验


#include<iostream> #include<cstring> #include<cstdio> #include<cmath> #include<algorithm> using namespace std;   void Getin( double &shu ) {     char c; int f=1; shu=0;     for( c=getchar(); c<'0' || c>'9'; c=getchar() ) if( c=='-' ) f=-1;     for( ; c>='0' && c<='9'; c=getchar() ) shu=shu*10+c-'0';     shu*=f; }   const double eps=1e-9; const int INF=0x3f3f3f3f; const int N=110;   int n; double T, map[N][N], dis[N][N]; struct node{ double x, y; }p[N];     double Distance( node a, node b ) {     double x=( a.x-b.x )*( a.x-b.x );     double y=( a.y-b.y )*( a.y-b.y );     return sqrt( x+y ); }   void Floyd() {     for( int k=1; k<=n; k++ )         for( int i=1; i<=n; i++ )             for( int j=1; j<=n; j++ )                 if( i!=j && i!=k && j!=k )                     dis[i][j]=min( dis[i][j], dis[i][k]+dis[k][j] ); }   bool Check( double mid ) {     double len=mid*2, maxl=0;           for( int i=1; i<=n; i++ )         for( int j=1; j<=n; j++ ) if( i!=j ) {             dis[i][j]=INF;             if( map[i][j]<=len ) dis[i][j]=map[i][j];         }           Floyd();           for( int i=1; i<=n; i++ )         for( int j=1; j<=n; j++ ) if( i!=j )             maxl=max( maxl, dis[i][j] );           if( maxl<=T ) return 1;     else return 0; }     double  l, r, mid; int main() {     scanf( "%d", &n ); Getin(T);     for( int i=1; i<=n; i++ ) Getin( p[i].x ), Getin( p[i].y );     for( int i=1; i<=n; i++ )         for( int j=1; j<=n; j++ ) if( i!=j ) {             map[i][j]=Distance( p[i], p[j] );             r=max( r, map[i][j] );         }     if( r>T ) printf( "-1\n" );     else {         r/=2;         while( r-l>eps ) {             double mid=( l+r )/2;             if( Check( mid ) ) r=mid;             else l=mid;         }         printf( "%.8lf\n", l );     }     return 0; } 


原创粉丝点击