• poj Building a Space Station


    http://poj.org/problem?id=2031

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<cmath>
     4 #include<algorithm>
     5 using namespace std;
     6 
     7 const double eps=1e-8;
     8 const int inf=1<<23;
     9 int cmp(double x)
    10 {
    11     if(fabs(x)<eps) return 0;
    12     if(x>0) return 1;
    13     return -1;
    14 }
    15 
    16 const double pi=acos(-1.0);
    17 inline double sqr(double x)
    18 {
    19     return x*x;
    20 }
    21 
    22 inline double Sqrt(double a)
    23 {
    24     return a<=0?0:sqrt(a);
    25 }
    26 
    27 struct point
    28 {
    29    double x,y,z,r;
    30    point(){}
    31    point(double a,double b,double c,double d):x(a),y(b),z(c),r(d){}
    32 };
    33 
    34 double dis(const point &a,const point &b)
    35 {
    36     return Sqrt(sqr(a.x-b.x)+sqr(a.y-b.y)+sqr(a.z-b.z));
    37 }
    38 
    39 double dist[1000];
    40 double diss[110][110],ans;
    41 bool vis[1000];
    42 bool prime(int n)
    43 {
    44     memset(vis,0,sizeof(vis));
    45     for(int i=1; i<=n; i++)
    46         dist[i]=inf;
    47     ans=0;dist[1]=0;
    48     for(int i=1; i<=n; i++){
    49         double temp=inf;
    50         int k=0;
    51         for(int j=1; j<=n; j++)
    52         {
    53             if(!vis[j]&&dist[j]<temp)
    54             {
    55                 temp=dist[j];
    56                 k=j;
    57             }
    58         }
    59         if(temp==inf) return false;
    60         vis[k]=true;
    61         ans+=temp;
    62         for(int j=1; j<=n; j++)
    63         {
    64             if(!vis[j]&&dist[j]>diss[k][j])
    65             {
    66                 dist[j]=diss[k][j];
    67             }
    68         }
    69     }
    70     return true;
    71 }
    72 int main()
    73 {
    74     int n;
    75     while(scanf("%d",&n)&&n)
    76     {
    77         point a[1000];
    78         memset(diss,0,sizeof(diss));
    79         for(int i=1; i<=n; i++)
    80         {
    81             scanf("%lf%lf%lf%lf",&a[i].x,&a[i].y,&a[i].z,&a[i].r);
    82         }
    83         memset(diss,0,sizeof(diss));
    84         for(int i=1; i<=n; i++)
    85         {
    86             for(int j=1; j<=n; j++)
    87             {
    88                 if(dis(a[i],a[j])-a[i].r-a[j].r<=0)
    89                 diss[i][j]=0;
    90                 else if(dis(a[i],a[j])-a[i].r-a[j].r>eps)
    91                 diss[i][j]=dis(a[i],a[j])-a[i].r-a[j].r;
    92             }
    93         }
    94         prime(n);
    95         printf("%.3lf
    ",ans);
    96     }
    97     return 0;
    98 }
    View Code
  • 相关阅读:
    Openstack API 开发 快速入门
    virtualBox虚拟机到vmware虚拟机转换
    使用Blogilo 发布博客到cnblogs
    Openstack Troubleshooting
    hdoj 1051 Wooden Sticks(上升子序列个数问题)
    sdut 2430 pillars (dp)
    hdoj 1058 Humble Numbers(dp)
    uva 10815 Andy's First Dictionary(快排、字符串)
    sdut 2317 Homogeneous squares
    hdoj 1025 Constructing Roads In JGShining's Kingdom(最长上升子序列+二分)
  • 原文地址:https://www.cnblogs.com/fanminghui/p/3376600.html
Copyright © 2020-2023  润新知