原题链接:公路修建 - 洛谷

 

思路:其实就是最小生生成树。想想看,如果有2的情况,即三个点ABC,离A最近的点为B,离B最近的点为C,离C最近的点为A。那么把三条边设为a,b,c,即要满足a < c && b < a && c < b,这个式子是不可能成立的。除非这个图形是个正n边形,那么随便删去一条边,每条边的长度是一样的,所以其实就无所谓。因此就是一个求最小生成树的问题而已。

注意一个地方!最后求的是double,那么可以先把平方和求出来放在那,最后加到ans的时候再把它强制转换成double然后sqrt,这样就不会有double和long long之间不知道怎么瞎转换的问题了。碰到求距离而且有要求精度的问题,可以先把距离用它的平方来表示,最后强制转换double然后sqrt。

ps:double输出小数的时候本身就是按照四舍五入的规则得到答案的

AC代码:

#include<bits/stdc++.h>
#define INF 0x3f3f3f3f
#define ll long long
#define PII pair<int,int>
#define rep(i, n) for (int i = 1; i <= (n); ++i)
#define rrep(i, n) for(int i = n; i >= 1; ++i)using namespace std;const double pi = acos(-1.0);const int N = 5005;int n;
ll dist[N];
bool st[N];
double ans = 0;struct node
{double l, r;
}Node[N];long long dis(int x, int y){return (Node[x]. l - Node[y].l) * (Node[x]. l - Node[y].l) + (Node[x]. r - Node[y].r) * (Node[x]. r - Node[y].r);
}void prim()
{rep(i, n) dist[i] = 1e14;for (int i = 0; i < n; i ++ ){int t = -1;for (int j = 1; j <= n; j ++ )if (!st[j] && (t == -1 || dist[t] > dist[j]))t = j;if (i) ans += sqrt((double)dist[t]);st[t] = true;for (int j = 1; j <= n; j ++ ){if(!st[j]) dist[j] = min(dist[j], dis(t, j));}}
}int main()
{scanf("%d", &n);rep(i, n) scanf("%lf %lf", &Node[i].l, &Node[i].r);prim();printf("%.2f\n", ans);return 0;
}

P1265 公路修建(Prim最小生成树)相关推荐

  1. 洛谷 P1265 公路修建 题解

    1 题面 公路修建 2 分析 这题特别的地方就是边多,5000×50005000\times 50005000×5000的边用kruscal空间不对. 主要空间瓶颈就是边的权是存不下来的,然而krus ...

  2. 洛谷P1265 公路修建

    题目描述 ---------- 太长不看版:给你一个数字n,接下来是n个点的x.y坐标,求个最小生成树 ---------- 某国有n个城市,它们互相之间没有公路相通,因此交通十分不便.为解决这一&q ...

  3. 洛谷P1265 公路修建题解

    题目描述 某国有n个城市,它们互相之间没有公路相通,因此交通十分不便.为解决这一"行路难"的问题,政府决定修建公路.修建公路的任务由各城市共同完成. 修建工程分若干轮完成.在每一轮 ...

  4. P1265 公路修建

    复习prim算法系列 虽然prim跟dij是差不多的,但是两者还是有一点点差别. 就像我这种菜鸡,只会dij,结果写出来的prim奇怪得很. 这道题我还特意写了个堆优化,但是也没快到那儿去... 首先 ...

  5. 洛谷 [P1265] 公路修建

    本题的描述:城市联盟,最短距离.. 使人想到了prim求MST,再一看数据范围:完全图!,那么一定得用prim,因为只有5000个点,所以不加优化的prim就能过. #include <iost ...

  6. 【BZOJ1196】公路修建问题,二分+最小生成树

    [HNOI2006]公路修建问题 Time Limit: 10 Sec Memory Limit: 162 MB Submit: 1534 Solved: 879 Description OI isl ...

  7. bzoj 1196: [HNOI2006]公路修建问题(贪心+最小生成树)

    1196: [HNOI2006]公路修建问题 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 2657  Solved: 1511 [Submit][ ...

  8. 技术图文:如何利用C# 实现 Prim 最小生成树算法?

    背景 我们上一篇图文介绍了 如何利用 C# 实现 Kruskal 最小生成树算法?,Kruskal 算法通过寻找边最优的方式来构造最小生成树,本篇图文介绍如何利用 C# 实现 Prim 最小生成树算法 ...

  9. 数据结构---prim最小生成树

    数据结构-prim最小生成树 原理:参考趣学数据结构 代码: #include<stdio.h> #include<stdlib.h> #define N 100 #defin ...

最新文章

  1. 那些年困扰 Linux 的蠕虫、病毒和木马
  2. 五种方法创建 Java 对象,你知道几种呢?
  3. python的快速入门-Python快速入门,你想要的就在这里了!
  4. java注释的简单_Java简单注解
  5. 没有bug队——加贝——Python 练习实例 7,8
  6. CCF 201412-2 Z字形扫描
  7. How to install OpenERP 6 on Ubuntu 10.04 LTS Server--1
  8. Python批量下载电子邮件附件并汇总合并Excel文件_如何让繁琐工作自动化:聊聊Python与RPA...
  9. java 获取视频时长
  10. uKey双向认证https
  11. 大数据第三季--spark(day1)-徐培成-专题视频课程
  12. 生物信息学 之 序列比对
  13. 回波损耗、反射系数、电压驻波比以及S参数的物理意义
  14. Python数据字典处理Excel,并统计总数,画出饼图
  15. grpc-go 连接backoff协议
  16. python股票回测源码_Python爬虫回测股票的实例讲解
  17. 我让我 9 岁的女儿利用 ChatGPT 来学习数学
  18. 适用于 Windows 的 iTunes 10.12.9.3 64位 最新版 下载,支持 iOS 14
  19. Windows DNS服务器的子网掩码排序
  20. 射频卡(mifare)防冲突机制详解

热门文章

  1. 基于多元线性回归去除图片水印(Java版)
  2. 个人中心--订单业务流程
  3. 打cf提示计算机内存不足怎么办,win7中cf内存不足闪退怎么办?-处理win7下cf提示“内存不足”的方法 - 河东软件园...
  4. 声学回声消除(Acoustic Echo Cancellation)
  5. 回溯法求解:工作分配问题
  6. MediBangPaint Pro for Mac(漫画制作软件)
  7. 大数据分析技术之JAVA基础(一):数据类型
  8. 商业智能BI行业分析思维框架:铅酸蓄电池行业(一)
  9. android游戏开发——微信打飞机(一)
  10. oracle字段只提取汉字_Excel自学教程:数据规范——如何快速提取文字中间的数字...