zoukankan      html  css  js  c++  java
  • Building a Space Station POJ

    题目链接:https://vjudge.net/problem/POJ-2031

    思路:最小生成树板子题

      1 #include <iostream>
      2 #include <cstdio>
      3 #include <cstring>
      4 #include <algorithm>
      5 #include <queue>
      6 #include <stack>
      7 #include <string>
      8 #include <map>
      9 #include <cmath>
     10 using namespace std;
     11  
     12 typedef long long LL;
     13 #define inf 1e11
     14 #define rep(i,j,k) for(int i = (j); i <= (k); i++)
     15 #define rep__(i,j,k) for(int i = (j); i < (k); i++)
     16 #define per(i,j,k) for(int i = (j); i >= (k); i--)
     17 #define per__(i,j,k) for(int i = (j); i > (k); i--)
     18 
     19 const int N = 110;
     20 int head[N];
     21 int cnt;
     22 double dis[N];
     23 bool vis[N];
     24 int n;
     25 
     26 struct Point{
     27     double x,y,z,r;
     28 }p[N];
     29 
     30 struct Edge{
     31     int to;
     32     double w;
     33     int nxt;
     34 }e[N*N];
     35 
     36 struct node{
     37     int u;
     38     double w;
     39     friend bool operator<(const node& a,const node& b){
     40         return a.w > b.w;
     41     }
     42 };
     43 
     44 priority_queue<node > que;
     45 
     46 void add(int u,int v,double w){
     47     e[cnt].to = v;
     48     e[cnt].w = w;
     49     e[cnt].nxt = head[u];
     50     head[u] = cnt++;
     51 }
     52 
     53 inline double get_dis(Point& a,Point& b){
     54     return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y)+(a.z-b.z)*(a.z-b.z))-a.r-b.r;
     55 }
     56 
     57 double prime(){
     58     while(!que.empty()) que.pop();
     59 
     60     rep(i,1,n){
     61         vis[i] = false;
     62         dis[i] = inf;
     63     }
     64     dis[1] = 0;
     65     que.push(node{1,dis[1]});
     66    
     67     int u,v;
     68     double w;
     69     while(!que.empty()){
     70         u = que.top().u;
     71         que.pop();
     72         if(vis[u]) continue;
     73         vis[u] = true;
     74 
     75         for(int o = head[u]; ~o; o = e[o].nxt){
     76             v = e[o].to;
     77             w = e[o].w;
     78 
     79             if(!vis[v] && dis[v] > w){
     80                 dis[v] = w;
     81                 que.push(node{v,dis[v]});
     82             }
     83         }
     84     }
     85 
     86     double ans = 0;
     87     rep(i,1,n) ans += dis[i];
     88     return ans;
     89 }
     90 
     91 int main(){
     92 
     93     double tmp;
     94     while(~scanf("%d",&n)){
     95         if(n == 0) break;
     96         rep(i,1,n) head[i] = -1;
     97         cnt = 0;
     98 
     99         rep(i,1,n) scanf("%lf%lf%lf%lf",&p[i].x,&p[i].y,&p[i].z,&p[i].r);
    100 //        rep(i,1,n) printf("%.3f %.3f %.3f %.3f
    ",p[i].x,p[i].y,p[i].z,p[i].r);
    101 
    102         rep(i,1,n) rep(j,i+1,n){
    103             tmp = get_dis(p[i],p[j]);
    104             add(i,j,tmp > 0 ? tmp : 0);
    105             add(j,i,tmp > 0 ? tmp : 0);
    106         }
    107 
    108         printf("%.3f
    ",prime());
    109     }
    110 
    111     getchar(); getchar();
    112     return 0;
    113 }
  • 相关阅读:
    [Learn AF3]第二章 App Framework 3.0的组件View——AF3的驱动引擎
    [Learn AF3]第一章 如何使用App Framework 3.0 构造应用程序
    [译]Intel App Framework 3.0的变化
    手机浏览器中屏蔽img的系统右键菜单context menu
    HTML5 touche vents drag to move & AF actionsheet by longTap
    HTML5 FileReader
    【转】Gulp入门基础教程
    【Intel AF 2.1 学习笔记三】
    【Intel AF 2.1 学习笔记二】AF中的页面——Panel
    【Intel AF 2.1 学习笔记一】AF程序结构
  • 原文地址:https://www.cnblogs.com/SSummerZzz/p/11822872.html
Copyright © 2011-2022 走看看