博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ1626 修建道路【例题精讲】
阅读量:5054 次
发布时间:2019-06-12

本文共 1519 字,大约阅读时间需要 5 分钟。

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,并且这是所有方案中道路
总长最小的一种。
 
    此题是一道比较裸的最小生成树,用kruskal就好,只不过题目中有一个干扰项,就是可能会给出一部分已经修建好的道路,然后呢我们可以把所有给了边的两个点加到kruskal的并查集里合并一下,这样在扫描的时候就可以不管这两个点;
但是呢,我一开始就是这样写的,各种地方都修改过了,题解也是这么写的,但是我死活wa五组数据!
迫不得已换招!如果两个点之间给了边,那么就在这两点之间添加一条权值为零的边,然后直接跑最小生成树就好,因为权值为零嘛,一定会加入最小生成树的!
 
下面上代码:
 
1 //苍山负雪,明烛天南;  2 #include
3 #include
4 #include
5 #include
6 #include
7 #include
8 #include
9 #include
10 using namespace std;11 const int MAXM=1000005;12 const int MAXN=1005;13 struct node{14 int x,y;15 double z;16 }edge[MAXM];17 bool cmp(node a,node b){18 return a.z
View Code

 

 

转载于:https://www.cnblogs.com/Alan-Luo/articles/8723245.html

你可能感兴趣的文章
java对象的深浅克隆
查看>>
Hadoop流程---从tpch到hive
查看>>
数据结构3——浅谈zkw线段树
查看>>
Introduction to my galaxy engine 2: Depth of field
查看>>
V2019 Super DSP3 Odometer Correction Vehicle List
查看>>
Python 3.X 练习集100题 05
查看>>
今时不同往日:VS2010十大绝技让VS6叹服
查看>>
设计器 和后台代码的转换 快捷键
查看>>
在线视频播放软件
查看>>
用代码生成器生成的DAL数据访问操作类 基本满足需求了
查看>>
28初识线程
查看>>
Monkey测试结果分析
查看>>
Sublime Text 3 设置
查看>>
浅谈C++底层机制
查看>>
STL——配接器、常用算法使用
查看>>
第9课 uart
查看>>
Range和xrange的区别
查看>>
BZOJ 1010 [HNOI2008]玩具装箱 (斜率优化DP)
查看>>
java-动态规划算法学习笔记
查看>>
STL容器之vector
查看>>