[BZOJ1626][Usaco2007 Dec]Building Roads 修建道路

1626: [Usaco2007 Dec]Building Roads 修建道路

Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 1730  Solved: 727 [Submit][Status][Discuss]

Description

Farmer John最近得到了一些新的农场,他想新修一些道路使得他的所有农场可以经过原有的或是新修的道路互达(也就是说,从任一个农场都可以经过一些首尾相连道路到达剩下的所有农场)。有些农场之间原本就有道路相连。 所有N(1 <= N <= 1,000)个农场(用1..N顺次编号)在地图上都表示为坐标为(X_i, Y_i)的点(0 <= X_i <= 1,000,000;0 <= Y_i <= 1,000,000),两个农场间道路的长度自然就是代表它们的点之间的距离。现在Farmer John也告诉了你农场间原有的M(1 <= M <= 1,000)条路分别连接了哪两个农场,他希望你计算一下,为了使得所有农场连通,他所需建造道路的最小总长是多少。

Input

* 第1行: 2个用空格隔开的整数:N 和 M

 * 第2..N+1行: 第i+1行为2个用空格隔开的整数:X_i、Y_i * 第N+2..N+M+2行: 每行用2个以空格隔开的整数i、j描述了一条已有的道路, 这条道路连接了农场i和农场j

Output

* 第1行: 输出使所有农场连通所需建设道路的最小总长,保留2位小数,不必做 任何额外的取整操作。为了避免精度误差,计算农场间距离及答案时 请使用64位实型变量

Sample Input

4 1
1 1
3 1
2 3
4 3
1 4

输入说明:

    FJ一共有4个坐标分别为(1,1),(3,1),(2,3),(4,3)的农场。农场1和农场
4之间原本就有道路相连。


Sample Output

4.00

输出说明:

    FJ选择在农场1和农场2间建一条长度为2.00的道路,在农场3和农场4间建一
条长度为2.00的道路。这样,所建道路的总长为4.00,并且这是所有方案中道路
总长最小的一种。
已经有的边权值赋为0,做最小生成树
#include <cmath> 
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
char buf[10000000], *ptr = buf - 1;
inline int readint(){int n = 0;char ch = *++ptr;while(ch < '0' || ch > '9') ch = *++ptr;while(ch <= '9' && ch >='0'){n = (n << 1) + (n << 3) + ch - '0';ch = *++ptr;}return n;
}
typedef long long ll;
const int maxn = 1000 + 10, maxm = 500000 + 1000 + 10;
struct Edge{int u, v;double w;Edge(){}Edge(int _u, int _v, double _w): u(_u), v(_v), w(_w){}bool operator < (const Edge &x) const {return w < x.w;}
}e[maxm];
int cnt = 0;
inline void add(int u, int v, double w){e[++cnt] = Edge(u, v, w);
}
inline ll sqr(int x){return (ll)x * x;
}
int x[maxn], y[maxn];
inline double dis(int a, int b){return sqrt(sqr(x[a] - x[b]) + sqr(y[a] - y[b]));
}
int fa[maxn];
int Find(int a){return a == fa[a] ? a : fa[a] = Find(fa[a]);
}
int main(){fread(buf, sizeof(char), sizeof(buf), stdin);int n, m;n = readint();m = readint();for(int i = 1; i <= n; i++){x[i] = readint();y[i] = readint();}for(int i = 1; i <= n; i++)for(int j = 1; j < i; j++)add(i, j, dis(i, j));for(int u, v, i = 1; i <= m; i++){u = readint();v = readint();add(u, v, 0);}sort(e + 1, e + cnt + 1);for(int i = 1; i <= n; i++) fa[i] = i; double ans = 0.0;for(int i = 1, k = 0; i <= cnt && k < n - 1; i++){if(Find(e[i].v) == Find(e[i].u)) continue;fa[Find(e[i].v)] = Find(e[i].u);k++;ans += e[i].w;}printf("%.2lf\n", ans);return 0;
}

 

转载于:https://www.cnblogs.com/ruoruoruo/p/7481884.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/391434.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

双城记s001_双城记! (使用数据讲故事)

双城记s001Keywords: Data science, Machine learning, Python, Web scraping, Foursquare关键字&#xff1a;数据科学&#xff0c;机器学习&#xff0c;Python&#xff0c;Web抓取&#xff0c;Foursquare https://br.pinterest.com/pin/92816442292506979/https://br.pintere…

python:linux中升级python版本

https://www.cnblogs.com/gne-hwz/p/8586430.html 转载于:https://www.cnblogs.com/gcgc/p/11446403.html

web前端面试总结

2019独角兽企业重金招聘Python工程师标准>>> 摘要&#xff1a;前端的东西特别多&#xff0c;面试的时候我们如何从容应对&#xff0c;作为一个老兵&#xff0c;我在这里分享几点我的经验。 一、javascript 基础(es5) 1、原型&#xff1a;这里可以谈很多&#xff0c;…

783. 二叉搜索树节点最小距离(dfs)

给你一个二叉搜索树的根节点 root &#xff0c;返回 树中任意两不同节点值之间的最小差值 。 注意&#xff1a;本题与 530&#xff1a;https://leetcode-cn.com/problems/minimum-absolute-difference-in-bst/ 相同 示例 1&#xff1a; 输入&#xff1a;root [4,2,6,1,3] 输…

linux epoll机制对TCP 客户端和服务端的监听C代码通用框架实现

1 TCP简介 tcp是一种基于流的应用层协议&#xff0c;其“可靠的数据传输”实现的原理就是&#xff0c;“拥塞控制”的滑动窗口机制&#xff0c;该机制包含的算法主要有“慢启动”&#xff0c;“拥塞避免”&#xff0c;“快速重传”。 2 TCP socket建立和epoll监听实现 数据结构…

linux中安装robot环境

https://www.cnblogs.com/lgqboke/p/8252488.html&#xff08;文中验证robotframework命令应该为 robot --version&#xff09; 可能遇到的问题&#xff1a; 1、python版本太低 解决&#xff1a;升级python https://www.cnblogs.com/huaxingtianxia/p/7986734.html 2、pip安装报…

angular 模块构建_我如何在Angular 4和Magento上构建人力资源门户

angular 模块构建Sometimes trying a new technology mashup works wonders. Both Magento 2 Angular 4 are very commonly talked about, and many consider them to be the future of the development industry. 有时尝试新技术的mashup会产生奇迹。 Magento 2 Angular 4都…

tableau破解方法_使用Tableau浏览Netflix内容的简单方法

tableau破解方法Are you struggling to perform EDA with R and Python?? Here is an easy way to do exploratory data analysis using Tableau.您是否正在努力使用R和Python执行EDA&#xff1f; 这是使用Tableau进行探索性数据分析的简单方法。 Lets Dive in to know the …

六周第三次课

2019独角兽企业重金招聘Python工程师标准>>> 六周第三次课 9.6/9.7 awk awk也是流式编辑器&#xff0c;针对文档中的行来操作&#xff0c;一行一行地执行。 awk比sed更强大的功能是它支持了分段。 -F选项的作用是指定分隔符&#xff0c;如果不加-F选项&#xff0c;…

面试题字符集和编码区别_您和理想工作之间的一件事-编码面试!

面试题字符集和编码区别A recruiter calls you for a position with your dream company. You get extremely excited and ask about their recruiting process. He replies saying “Its nothing big, you will have 5 coding rounds with our senior tech team, just the sta…

初探Golang(1)-变量

要学习golang&#xff0c;当然要先配置好相关环境啦。 1. Go 安装包下载 https://studygolang.com/dl 在Windows下&#xff0c;直接下载msi文件&#xff0c;在安装界面选择安装路径&#xff0c;然后一直下一步就行了。 在cmd下输入 go version即可看到go安装成功 2. Golan…

macaca web(4)

米西米西滴&#xff0c;吃过中午饭来一篇&#xff0c;话说&#xff0c;上回书说道macaca 测试web&#xff08;3&#xff09;&#xff0c;参数驱动来搞&#xff0c;那么有小伙本又来给雷子来需求&#xff0c; 登录模块能不能给我给重新封装一下吗&#xff0c; 我说干嘛封装&…

linux中安装cx_Oracle

https://blog.csdn.net/w657395940/article/details/41144225 各种尝试都&#xff0c;最后 pip install cx-Oracle 成功导入 转载于:https://www.cnblogs.com/gcgc/p/11447583.html

rfm模型分析与客户细分_如何使用基于RFM的细分来确定最佳客户

rfm模型分析与客户细分With some free time at hand in the midst of COVID-19 pandemic, I decided to do pro bono consulting work. I was helping a few e-commerce companies with analyzing their customer data. A common theme I encountered during this work was tha…

leetcode 208. 实现 Trie (前缀树)

Trie&#xff08;发音类似 “try”&#xff09;或者说 前缀树 是一种树形数据结构&#xff0c;用于高效地存储和检索字符串数据集中的键。这一数据结构有相当多的应用情景&#xff0c;例如自动补完和拼写检查。 请你实现 Trie 类&#xff1a; Trie() 初始化前缀树对象。 void…

那些年收藏的技术文章(一) CSDN篇

#Android ##Android基础及相关机制 Android Context 上下文 你必须知道的一切 Android中子线程真的不能更新UI吗&#xff1f; Android基础和运行机制 Android任务和返回栈完全解析&#xff0c;细数那些你所不知道的细节 【凯子哥带你学Framework】Activity启动过程全解析 【凯子…

chrome json插件_如何使用此免费的Chrome扩展程序(或Firefox插件)获取易于阅读的JSON树

chrome json插件JSON is a very popular file format. Sometimes we may have a JSON object inside a browser tab that we need to read and this can be difficult.JSON是一种非常流行的文件格式。 有时我们可能需要在浏览器选项卡中包含一个JSON对象&#xff0c;这很困难。…

test10

test10 转载于:https://www.cnblogs.com/Forever77/p/11447638.html

数据仓库项目分析_数据分析项目:仓库库存

数据仓库项目分析The code for this project can be found at my GitHub.该项目的代码可以在我的GitHub上找到 。 介绍 (Introduction) The goal of this project was to analyse historic stock/inventory data to decide how much stock of each item a retailer should hol…

leetcode 213. 打家劫舍 II(dp)

你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋&#xff0c;每间房内都藏有一定的现金。这个地方所有的房屋都 围成一圈 &#xff0c;这意味着第一个房屋和最后一个房屋是紧挨着的。同时&#xff0c;相邻的房屋装有相互连通的防盗系统&#xff0c;如果两间相邻的房屋在同一…