描述


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

给出\(n\)个点的坐标,其中一些点已经连通,现在要把所有点连通,求修路的最小长度.

分析


已经连好一些边的最小生成树问题.

这里顺带复习了一下Prim和Krusakal.

Prim的证明:

设当前已经连好的树为\(T\),当前最小的边为\(e\),我们来证明\(e\)一定在最小生成树\(G\)中.

假设\(e\)不在\(G\)中,则连通\(G-T\)和\(T\)的边\(e'\)一定比\(e\)大(或相等).此时我们在\(G\)中加入\(e\),会形成环,去掉环中的\(e'\),树依然连通,而花费更小了,这与\(G\)是最小生成树矛盾.(如果\(e\)与\(e'\)相等那么虽然花费不会更小,也就是说\(e\)可以不再\(G\)中,但是我们也可以用\(e\)替换\(e'\),换言之,\(e\)在\(G\)中是不错误的.)

所以\(e\)一定在最小生成树\(G\)中.

Kruskal的证明:

设当前连接两个不连通分量的最小的边为\(e\),我们来证明\(e\)一定在最小生成树\(G\)中.

假设\(e\)不再\(G\)中,则连通这两个分量的边\(e'\)一定比\(e\)大(或相等).此时我们 在\(G\)中加入\(e\),会形成环,去掉环中的\(e'\),树依然连通,而花费更小了,这与\(G\)是最小生成树矛盾.(如果\(e\)与 \(e'\)相等那么虽然花费不会更小,也就是说\(e\)可以不再\(G\)中,但是我们也可以用\(e\)替换\(e'\),换言之,\(e\)在 \(G\)中是不错误的.)

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3
 4 const int maxn=1000+5;
 5 struct pt{
 6     double x,y;
 7     pt(double x=0,double y=0):x(x),y(y){}
 8 }p[maxn];
 9 struct edge{
10     int from,to;
11     double d;
12     edge(){}
13     edge(int from,int to,double d):from(from),to(to),d(d){}
14     bool operator < (const edge &rhs) const { return d<rhs.d; }
15 }g[maxn*maxn];
16 int n,m,cnt=1;
17 int f[maxn];
18 double ans;
19 inline double dis(pt a,pt b){ return sqrt(pow(a.x-b.x,2)+pow(a.y-b.y,2)); }
20 inline int find(int x){ return x==f[x]?x:f[x]=find(f[x]); }
21 int main(){
22     scanf("%d%d",&n,&m);
23     for(int i=1;i<=n;i++){
24         scanf("%lf%lf",&p[i].x,&p[i].y);
25         f[i]=i;
26     }
27     for(int i=1;i<=m;i++){
28         int u,v; scanf("%d%d",&u,&v);
29         int fu=find(u),fv=find(v);
30         if(fu!=fv) f[fu]=fv,cnt++;
31     }
32     for(int i=1;i<=n;i++)for(int j=1;j<=n;j++) g[(i-1)*n+j]=edge(i,j,dis(p[i],p[j]));
33     sort(g+1,g+1+n*n);
34     int tot=n*n;
35     for(int i=1;i<=tot,cnt<=n;i++){
36         int fx=find(g[i].from),fy=find(g[i].to);
37         if(fx!=fy){
38             f[fx]=fy;
39             ans+=dis(p[g[i].from],p[g[i].to]);
40             cnt++;
41         }
42     }
43     printf("%.2lf\n",ans);
44     return 0;
45 }

View Code

转载于:https://www.cnblogs.com/Sunnie69/p/5581419.html

BZOJ_1626_[Usaco2007_Dec]_Building_Roads_修建道路_(Kruskal)相关推荐

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

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

  2. 7-14 修建道路 (10 分)

    7-14 修建道路 (10 分) N个村庄,从1到N编号,现在请您兴建一些路使得任何两个村庄彼此连通.我们称村庄A和B是连通的,当且仅当在A和B之间存在一条路,或者存在一个存在C,使得A和C之间有一条 ...

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

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

  4. poj2421修建道路

    题目 有N个村庄,编号从1到N,你应该建造一些道路,这样每两个村庄就可以相互连接.我们说两个村庄A和B是相连的,当且仅当A和B之间有一条路,或者存在一个村庄C,使得A和C之间有一条路,C和B是相连的. ...

  5. 【考题 题解】奇怪机器人单词方阵修建道路

    前言 欢迎关注我(小周猪猪)的博客,同时也欢迎关注为你们讲解的乔治大佬(心畅)的博客.如果对于原来的考试,你有不会的题,可以参考数字游戏题解,搜索题解,递归地推题解或者更多讲课内容的笔记与讲解. 1. ...

  6. 光伏智能道路_这条光伏公路,能承重,晒太阳能发电,西方国家:中国技术好...

    晒晒太阳就能发电,电动汽车跑在上面就能充电,下雪后还能自行融化路面积雪,这就是中国已经建成的又一个超级工程,世界首条光伏公路. 2017年,济南南绕城高速公路建设完成,成为世界首条承载光伏路面的高速公 ...

  7. 提取地图中道路_逼疯谷歌地球!我用神器一键提取各种肌理,还能生成3D模型!...

    点击文末「在看」「赞」,我们将第一时间出现在你面前 每天8:15,设计气象台准时为你带来最新黑科技干货知识 前期分析好做吗?看到这个问题,你可能会想,不就网上随便截个地图P一P嘛,有多难? 那比如说, ...

  8. 提取地图中道路_非机器学习方法·从遥感影像中提取道路

    本科低年级曾经做过一个提取道路线的题目. 提供的数据:老师给我们了一幅学校周边地区的影像,包括RGB+Infrared四个波段. 一开始使用的方法:当时尚青涩的我和小伙伴们一起使用KMEANS.阈值分 ...

  9. BZOJ——1626: [Usaco2007 Dec]Building Roads 修建道路

    http://www.lydsy.com/JudgeOnline/problem.php?id=1626 Time Limit: 5 Sec  Memory Limit: 64 MB Submit:  ...

  10. 修建道路(最小生成树)

    N个村庄,从1到N编号,现在请您兴建一些路使得任何两个村庄彼此连通.我们称村庄A和B是连通的,当且仅当在A和B之间存在一条路,或者存在一个存在C,使得A和C之间有一条路,并且C和B是连通的. 已知在一 ...

最新文章

  1. springJDBC实现查询方法二
  2. 前端实习生笔试_一道来自美图的实习生前端笔试算法题
  3. 当对项目强名时自动构建失败(TeamFoudationServer试用笔记)
  4. Redis和mysql数据怎么保持数据一致的?
  5. PHP——使用PHPMailer实现PHP发邮件功能
  6. RStudio快捷键
  7. 遍历opencv中的mat像素的几种方法和概念
  8. Linux C语言 文件操作
  9. 西安石油大学计算机基础考试试题,2017年西安石油大学计算机学院824计算机组成原理考研题库...
  10. 设计模式解密(12)- 桥接模式
  11. 浅谈Oracle绑定变量
  12. 算法总结之 生成窗口的最大值数组
  13. 机器人工程师学习计划(新工科自学方案)------杨硕
  14. Rose与PowerDesigner:两款UML建模工具的对比
  15. 8K HDR!|为 Chromium 实现 HEVC 硬解 - 原理/实测指南
  16. CytusII 剧情梳理
  17. Android 实现搜索历史(1)
  18. 在方框里打勾 microsoft office
  19. 15nm粒径球形纳米金AuNPs-Thrombin修饰R-藻红蛋白/阿霉素的制备过程
  20. r语言导出文件为xlxs_R语言数据导出到Excel表格-如何将R语言中的表格数据输出为Excel文件...

热门文章

  1. Percona Toolkit工具箱的安装与使用--完成复杂的mysql操作。
  2. 《从零开始学Swift》学习笔记(Day 13)——数据类型之整型和浮点型
  3. 太平洋女性网焦点图的几种写法
  4. 自己定义android 4.0以上的对话框风格
  5. 简单设置让Win7不等更新直接关机
  6. ECSHOP首页调用文章内的缩略图
  7. 春节见闻之北京前门步行街
  8. 《基于Mozilla的扩展开发》系列文章
  9. verycd重整——《TrainSignal视频教程》(TrainSignal)[ISO]
  10. 再谈如何写好技术文档?