秦始皇统一中国之后要在全国修公路连接各个城市,皇帝只想修成最小生成树(距离最小,不考虑人力),一个道士说自己可以不花人力物力修一条路,经过两方妥协,选择max(两个城市人口/(生成树长度-这条路的长度(连接两个城市的路中,权值最大的那段路)))的路让他变,求这个比值最大值。

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <sstream>
  4. #include <cstring>
  5. #include <map>
  6. #include <set>
  7. #include <vector>
  8. #include <stack>
  9. #include <queue>
  10. #include <algorithm>
  11. #include <cmath>
  12. #define rap(i, a, n) for(int i=a; i<=n; i++)
  13. #define MOD 2018
  14. #define LL long long
  15. #define ULL unsigned long long
  16. #define Pair pair<int, int>
  17. #define mem(a, b) memset(a, b, sizeof(a))
  18. #define _ ios_base::sync_with_stdio(0),cin.tie(0)
  19. //freopen("1.txt", "r", stdin);
  20. using namespace std;
  21. const int maxn = , INF = 0x7fffffff;
  22. int n;
  23. int pre[maxn], vis[maxn];
  24. double graph[maxn][maxn], maxd[maxn][maxn], d[maxn];
  25. struct node
  26. {
  27. int x, y, p;
  28. }Node[maxn];
  29.  
  30. double prime(int s)
  31. {
  32. double sum = ;
  33. mem(vis, );
  34. mem(maxd, );
  35. int temp;
  36. rap(i, , n) d[i] = graph[s][i], pre[i] = s;
  37. d[s] = ;
  38. vis[s] = ;
  39. rap(i, , n-)
  40. {
  41. double mincost = INF;
  42. rap(j, , n)
  43. if(!vis[j] && mincost > d[j])
  44. {
  45. temp = j;
  46. mincost = d[j];
  47. }
  48. rap(j, , n)
  49. if(vis[j] && j != temp) maxd[temp][j] = maxd[j][temp] = max(mincost, maxd[pre[temp]][j]);
  50. sum += mincost;
  51. vis[temp] = ;
  52. // used[temp][pre[temp]] = used[pre[temp]][temp] = 1;
  53. rap(j, , n)
  54. {
  55. if(!vis[j] && d[j] > graph[temp][j])
  56. d[j] = graph[temp][j], pre[j] = temp;
  57. }
  58. }
  59. return sum;
  60. }
  61.  
  62. int main()
  63. {
  64. int T;
  65. scanf("%d", &T);
  66. while(T--)
  67. {
  68. //求次小生成树还是得需要这段代码,用来找到不在生成树里的边
  69. // scanf("%d", &n);
  70. // for(int i=1; i<=n; i++)
  71. // for(int j=1; j<=n; j++)
  72. // if(i == j) graph[i][j] = 0;
  73. // else graph[i][j] = graph[j][i] = INF;
  74. rap(i, , n)
  75. {
  76. scanf("%d%d%d", &Node[i].x, &Node[i].y, &Node[i].p);
  77. }
  78. rap(i, , n)
  79. rap(j, i+, n)
  80. graph[i][j] = graph[j][i] = sqrt((double)(Node[i].x - Node[j].x)*(Node[i].x - Node[j].x) + (double)(Node[i].y - Node[j].y)*(Node[i].y - Node[j].y));
  81. double dis = prime();
  82. double sum = -;
  83. rap(i, , n)
  84. rap(j, i+, n)
  85. if(pre[i] == j || pre[j] == i) //对于当前结点i和j 如果i和j之间有直接边(在生成树中的) 则dis减直接边
  86. sum = max(sum, 1.0*(Node[i].p + Node[j].p)/(dis - graph[i][j]));
  87. else //没有直接边 则减i和j之间那条路中权值最大的那段路
  88. sum = max(sum, 1.0*(Node[i].p + Node[j].p)/(dis - maxd[i][j]));
  89. printf("%.2f\n", sum);
  90.  
  91. }
  92.  
  93. return ;
  94. }

Qin Shi Huang's National Road System UVA - 1494(次小生成树)的更多相关文章

  1. hdu 4081 Qin Shi Huang's National Road System (次小生成树)

    Qin Shi Huang's National Road System Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/3 ...

  2. UValive 5713 Qin Shi Huang's National Road System

    Qin Shi Huang's National Road System Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/3 ...

  3. hdu 4081 Qin Shi Huang's National Road System (次小生成树的变形)

    题目:Qin Shi Huang's National Road System Qin Shi Huang's National Road System Time Limit: 2000/1000 M ...

  4. HDU 4081 Qin Shi Huang's National Road System 次小生成树变种

    Qin Shi Huang's National Road System Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/3 ...

  5. Qin Shi Huang's National Road System HDU - 4081(树形dp+最小生成树)

    Qin Shi Huang's National Road System HDU - 4081 感觉这道题和hdu4756很像... 求最小生成树里面删去一边E1 再加一边E2 求该边两顶点权值和除以 ...

  6. [hdu P4081] Qin Shi Huang’s National Road System

    [hdu P4081] Qin Shi Huang’s National Road System Time Limit: 2000/1000 MS (Java/Others)    Memory Li ...

  7. HDU4081 Qin Shi Huang's National Road System 2017-05-10 23:16 41人阅读 评论(0) 收藏

    Qin Shi Huang's National Road System                                                                 ...

  8. HDU4081:Qin Shi Huang's National Road System (任意两点间的最小瓶颈路)

    Qin Shi Huang's National Road System Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/3 ...

  9. HDU 4081—— Qin Shi Huang's National Road System——————【次小生成树、prim】

    Qin Shi Huang's National Road System Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/3 ...

随机推荐

  1. Nginx入门篇(二)之Nginx部署与配置文件解析

    一.Nginx编译安装 ()查看系统环境 [root@localhost tools]# cat /etc/redhat-release CentOS Linux release (Core) [ro ...

  2. abp 指定方法不生成api

    方法上面添加RemoteServiceAttribute特性

  3. 集群服务器、负载均衡和session共享,C#的static变量

    集群服务器:是指由两台以上服务器共同组成的服务器,目的是为了提高性能. 负载均衡:是基于集群服务器实现的,作用是当A服务器访问数达到一定上限时,接下来客户端的请求会自动分配给B服务器,目的是减少服务器 ...

  4. 7个Node.js的Web框架

    NodeJS也就是Node,是众所周知的使用javascript构建Web应用框架,它启动一个服务器非常简单,如下: var http = require('http'); http.createSe ...

  5. ADO.Net之SqlConnection、 Sqlcommand的应用

    ADO.Net之SqlConnection. Sqlcommand的应用 SqlConnection 的介绍与应用 1.介绍与作用 SqlConnection是ADO.NET中的连接类. 使用sqlc ...

  6. linux上open-vswitch安装和卸载

    一. ovs 从源码编译安装: 安装依赖项: # apt-get install make # apt-get install gcc # apt-get install build-essentia ...

  7. [C++基础] 成员变量的初始化顺序

    转载链接:https://blog.csdn.net/qq_37059483/article/details/78608375 1.成员变量在使用初始化列表初始化时,只与定义成员变量的顺序有关,与构造 ...

  8. python format用法详解

    #常用方法:print('{0},{1}'.format('zhangk', 32)) print('{},{},{}'.format('zhangk','boy',32)) print('{name ...

  9. Python 并行分布式框架:Celery 超详细介绍

    本博客摘自:http://blog.csdn.net/liuxiaochen123/article/details/47981111 先来一张图,这是在网上最多的一张Celery的图了,确实描述的非常 ...

  10. “Hello World!”团队第三周召开的第二次会议

    今天是我们团队“Hello World!”团队第三周召开的第二次会议.博客内容: 一.会议时间 二.会议地点 三.会议成员 四.会议内容 五.todo list 六.会议照片 七.燃尽图 一.会议时间 ...