• hdu 携程全球数据中心建设 (球面距离 + 最小生成树)


    题目

      1 #include <iostream>
      2 #include <cstdio>
      3 #include <cstring>
      4 #include <cstdlib>
      5 #include <cmath>
      6 #include <algorithm>
      7 using namespace std;
      8 double G[110][110], sum;
      9 const double pi = acos(-1);
     10 const int INF = (1<<28);
     11 
     12 struct node
     13 {
     14     double x, y;    //x是经度, y是纬度。
     15 }p[110];
     16 
     17 double angle(double lng1, double lat1, double lng2, double lat2)
     18 {
     19     double dlng = fabs(lng1-lng2)*pi/180;
     20     while(dlng >= pi+pi)
     21         dlng -= (pi+pi);
     22     if(dlng > pi)
     23         dlng = pi+pi-dlng;
     24     lat1 *= pi/180;
     25     lat2 *= pi/180;
     26     return acos(cos(lat1)*cos(lat2)*cos(dlng)+sin(lat1)*sin(lat2));
     27 }
     28 
     29 double sphere_dist(double r, double lng1, double lat1, double lng2, double lat2)
     30 {
     31     return r*angle(lng1, lat1, lng2, lat2);
     32 }
     33 
     34 void prime(int n)
     35 {
     36     int i, j, pos;
     37     int Min, vis[110];
     38     double d[110];
     39     memset(vis, 0, sizeof(vis));
     40     memset(d, 0, sizeof(d));
     41 
     42     for(i = 1; i <= n; i++)
     43     d[i] = G[1][i];
     44     vis[1] = 1;
     45     for(i = 2; i <= n; i++)
     46     {
     47         Min = INF;
     48         for(j = 1; j <= n; j++)
     49         {
     50             if(!vis[j] && Min>d[j])
     51             {
     52                 Min = d[j];
     53                 pos = j;
     54             }
     55         }
     56         sum += Min;
     57         vis[pos] = 1;
     58         for(j = 1; j <= n; j++)
     59         {
     60             if(!vis[j])
     61             {
     62                 if(d[j] > G[pos][j])
     63                     d[j] = G[pos][j];
     64             }
     65         }
     66     }
     67 }
     68 int main()
     69 {
     70     int n, t, c, i, j;
     71     double d, l, r;
     72     cin>>t;
     73     while(t--)
     74     {
     75         sum = 0;
     76         cin>>d>>l>>c;
     77         r = d/2*1.0;
     78         n = c;
     79         for(i = 1; i <= n; i++)
     80         {
     81             for(j = 1; j <= n; j++)
     82                 G[i][j] = INF;
     83             G[i][i] = 0;
     84         }
     85         for(i = 1; i <= n; i++)
     86             cin>>p[i].x>>p[i].y;
     87 
     88         for(i = 1; i <= n; i++)
     89             for(j = i+1; j <= n; j++)
     90         {
     91             G[i][j] = sphere_dist(r, p[i].y, p[i].x, p[j].y, p[j].x);
     92             G[j][i] = G[i][j];
     93         }
     94         prime(n);
     95         if(sum - l> 0)
     96             cout<<"N"<<endl;
     97         else
     98         cout<<"Y"<<endl;
     99     }
    100     return 0;
    101 }
  • 相关阅读:
    基于XML的声明式事务控制
    spring中JdbcTemplate使用
    四种常用的通知类型(xml)
    AOP配置步骤(XML)
    12388. 图论割边
    12389. 割点
    12206. 电缆网络
    12178. 破坏牛棚
    java反射笔记
    java单元测试
  • 原文地址:https://www.cnblogs.com/bfshm/p/3659504.html
Copyright © 2020-2023  润新知