码迷,mamicode.com
首页 > 其他好文 > 详细

[2016-04-14][POJ][203][Building a Space Station]

时间:2016-04-14 22:12:52      阅读:224      评论:0      收藏:0      [点我收藏+]

标签:

  • 时间:2016-04-14 21:43:30 星期四

  • 题目编号:[2016-04-14][POJ][203][Building a Space Station]

  • 题目大意:给定n个球体,每个球体可能重合,可能包含,可能分离,问把每个球体连接起来(重合和包含看做已经连接),至少需要多长的路

  • 分析:最小生成树,边权为 max(0,disij?ri?rj),即重合和内含,边权为0

  1. #include<cstdio>
  2. #include<cstring>
  3. #include<algorithm>
  4. #include<cmath>
  5. using namespace std;
  6. const int maxn = 100 + 10;
  7. double g[maxn][maxn],lowc[maxn];
  8. int vis[maxn];
  9. struct Point{
  10. double x,y,z,r;
  11. Point(double a = 0,double b = 0,double c = 0,double d = 0):x(a),y(b),z(c),r(d){}
  12. }p[maxn];
  13. double dtmp(double a,double b){
  14. return (a - b)*(a - b);
  15. }
  16. double dis(int a,int b){
  17. return sqrt(dtmp(p[a].x,p[b].x) + dtmp(p[a].y,p[b].y) + dtmp(p[a].z,p[b].z));
  18. }
  19. double prim(int n){
  20. memset(vis,0,sizeof(vis));
  21. vis[0] = 1;
  22. for(int i = 1 ; i < n ; ++i){
  23. lowc[i] = g[0][i];
  24. }
  25. double ans = 0;
  26. for(int i = 1 ; i < n ; ++i){
  27. double minc = 999999999;
  28. int p = -1;
  29. for(int j = 0 ; j < n ; ++j){
  30. if(!vis[j] && minc > lowc[j]){
  31. minc = lowc[j];
  32. p = j;
  33. }
  34. }
  35. if( minc == 999999999) return -1;
  36. ans += minc;
  37. vis[p] = 1;
  38. for(int j = 0 ; j < n ; ++j){
  39. if(!vis[j] && lowc[j] > g[p][j]){
  40. lowc[j] = g[p][j];
  41. }
  42. }
  43. }
  44. return ans;
  45. }
  46. int main(){
  47. int n;
  48. while(~scanf("%d",&n) && n){
  49. double a,b,c,d,tmp;
  50. for(int i = 0 ; i < n ; ++i){
  51. scanf("%lf%lf%lf%lf",&a,&b,&c,&d);
  52. p[i] = Point(a,b,c,d);
  53. }
  54. for(int i = 0 ; i < n ; ++i){
  55. for(int j = 0 ; j < n ; ++j){
  56. tmp = dis(i,j) - p[i].r - p[j].r;
  57. g[i][j] = max(double(0.0),tmp);
  58. }
  59. }
  60. printf("%.3f\n",prim(n));
  61. }
  62. return 0;
  63. }




[2016-04-14][POJ][203][Building a Space Station]

标签:

原文地址:http://www.cnblogs.com/qhy285571052/p/e34c3e74295c3a1b629df24242fcf51b.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!