http://www.lydsy.com/JudgeOnline/problem.php?id=1626

Time Limit: 5 Sec  Memory Limit: 64 MB
Submit: 1787  Solved: 755
[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,并且这是所有方案中道路
总长最小的一种。

HINT

Source

Silver

 1 #include <algorithm>
 2 #include <cstdio>
 3 #include <cmath>
 4
 5 inline void read(int &x)
 6 {
 7     x=0; register char ch=getchar();
 8     for(; ch>'9'||ch<'0'; ) ch=getchar();
 9     for(; ch>='0'&&ch<='9'; ch=getchar()) x=x*10+ch-'0';
10 }
11 const int N(1005);
12 double ans;
13 int n,m,t,cnt;
14 int fa[N],x[N],y[N];
15 struct Road {
16     int x,y;double dis;
17     bool operator < (const Road&x)const
18     {
19         return dis<x.dis;
20     }
21 }road[N*N>>1];
22
23 inline double Get_Dis(int i,int j)
24 {
25     double t1=(1.*x[i]-1.*x[j])*(1.*x[i]-1.*x[j]);
26     double t2=(1.*y[i]-1.*y[j])*(1.*y[i]-1.*y[j]);
27     return sqrt(1.*t1+1.*t2);
28 }
29
30 int find(int x) { return x==fa[x]?x:fa[x]=find(fa[x]); }
31
32 int Presist()
33 {
34     read(n),read(m);
35     for(int i=1; i<=n; ++i)
36         read(x[i]),read(y[i]),fa[i]=i;
37     for(int u,v,i=1; i<=m; ++i)
38         read(u),read(v),fa[find(v)]=find(u);
39     for(int i=1; i<=n; ++i)
40       for(int j=i+1; j<=n; ++j)
41       {
42         road[++cnt].dis=Get_Dis(i,j);
43           road[cnt].x=i,road[cnt].y=j;
44       }
45     std::sort(road+1,road+cnt+1);
46     for(int fx,fy,i=1; i<=cnt; ++i)
47     {
48         fx=find(road[i].x),
49         fy=find(road[i].y);
50         if(fx==fy) continue;
51         ans+=road[i].dis; fa[fx]=fy;
52         if(++t==n-1) break;
53     }
54     printf("%.2lf",ans);
55     return 0;
56 }
57
58 int Aptal=Presist();
59 int main(int argc,char**argv){;}

转载于:https://www.cnblogs.com/Shy-key/p/7741176.html

BZOJ——1626: [Usaco2007 Dec]Building Roads 修建道路相关推荐

  1. bzoj 1626: [Usaco2007 Dec]Building Roads 修建道路(最小生成树)

    1626: [Usaco2007 Dec]Building Roads 修建道路 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 1709  Solved ...

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

    1626: [Usaco2007 Dec]Building Roads 修建道路 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 1730  Solved ...

  3. BZOJ 1692: [Usaco2007 Dec]队列变换( 贪心 )

    数据 n <= 30000 , 然后 O( n² ) 的贪心也过了..... USACO 数据是有多弱啊 = = ( ps : BZOJ 1640 和此题一模一样 , 双倍经验 ) ------ ...

  4. bzoj 1690: [Usaco2007 Dec]奶牛的旅行(01分数规划--最优比率环)

    01分数规划问题: 给你n个物品,a[i]表示第i个物品的收益,b[i]表示代价,x[i]表示选或不选,求一个最佳方案使得下式取值最大 通用解: 当然是从式子上考虑,定义函数F[cnt]如下: 其中c ...

  5. BZOJ 1690 Usaco2007 Dec 奶牛的旅行

    1690: [Usaco2007 Dec]奶牛的旅行 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 1118  Solved: 595 [Submit] ...

  6. BZOJ 1691: [Usaco2007 Dec]挑剔的美食家( 平衡树 )

    按鲜嫩程度排个序, 从大到小处理, 用平衡树维护价值 ---------------------------------------------------------------------- #i ...

  7. bzoj 1696: [Usaco2007 Feb]Building A New Barn新牛舍

    1696: [Usaco2007 Feb]Building A New Barn新牛舍 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 481  Solv ...

  8. bzoj 1691: [Usaco2007 Dec]挑剔的美食家(multiset贪心)

    1691: [Usaco2007 Dec]挑剔的美食家 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 879  Solved: 445 [Submit] ...

  9. bzoj 1627: [Usaco2007 Dec]穿越泥地(BFS)

    1627: [Usaco2007 Dec]穿越泥地 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 768  Solved: 517 [Submit][S ...

最新文章

  1. 讲述Sagit.Framework解决:双向引用导致的IOS内存泄漏(上)
  2. boost::hana::is_valid用法的测试程序
  3. java os库_java-Mac OS X上的JNotify?
  4. poj 4468Spy(kmp算法)
  5. horizon流程图_项目实施流程和规范模板(测试方向)
  6. volatile深入
  7. python单词去重及排序_Python实现对文件进行单词划分并去重排序操作示例
  8. ionic云开发系列一
  9. 杀不死的人狼——我读《人月神话》(四)
  10. linux环境下编译llvm源码
  11. Dubbo系列(1)_背景介绍和基本情况
  12. win7副本不是正版_征途正版官网版下载-征途正版手游官网版下载1.0
  13. [线筛五连]线筛约数个数
  14. 猫鼠游戏之勒索病毒来袭
  15. 2020 3月 月末总结(一个月的面试收获了什么)
  16. MySQL - 5.7.31 - winx64 安装教程
  17. 查询Products中单价(UnitPrice)最高的Products的资料;
  18. 在centOS中安装MySQL时遇到Configuring incomplete,errors occurred该怎么办?
  19. 【JavaScript】offset、client、scroll
  20. 清华大学企业资本运营总裁高级研修班

热门文章

  1. react html编辑器,在线代码编辑器 Codemirror 的轻量级 React 组件
  2. Hibernate多表关联查询记录映射
  3. 挖矿为什么要用显卡_你知道为什么挖矿用显卡,而不用CPU吗?
  4. 吐槽 git 的一些愚蠢的接口设计: add/delete/remove/rm 选项随心所欲, 缺乏一致性
  5. GDAL库进度信息编写示例
  6. android开发那些事儿(一)
  7. 轻松解决idea一直卡在Resolving Maven dependencies的问题
  8. .net C# Treeview的Node拖动,Node节点上下移动
  9. Mybatis 与java 类型 对应表
  10. 多个cpp文件生成so_荐tf_sampling_so.so等文件怎么生成(多种tf版本都可的顺利解决方法)...