1. #include<iostream>
  2. #include<cstring>
  3. #include<stdio.h>
  4. #include<queue>
  5. #include<cmath>
  6. #include<algorithm>
  7. #include<string>
  8.  
  9. using namespace std;
  10.  
  11. int Tree[];
  12.  
  13. int findRoot(int x) // 查找节点x所在树的根节点
  14. {
  15. if(Tree[x] == -)
  16. return x;
  17. else
  18. { // 路径优化
  19. int tmp = findRoot(Tree[x]);
  20. Tree[x] = tmp;
  21. return tmp;
  22. }
  23. }
  24.  
  25. struct Edge
  26. {
  27. double a, b;
  28. double cost;
  29. }edge[];
  30.  
  31. bool cmp(Edge e1, Edge e2)
  32. {
  33. return e1.cost < e2.cost;
  34. }
  35.  
  36. struct Cursor // 坐标结构
  37. {
  38. double x, y; // 点的坐标(x, y)
  39. }cur[];
  40.  
  41. int main()
  42. {
  43. int n;
  44. while(scanf("%d", &n) != EOF)
  45. {
  46. for(int i = ; i <= n; ++i)
  47. {
  48. Tree[i] = -; // 初始时,所有点都是孤立的集合
  49. // 此处不能写为scanf("%f %f", &(cur[i].x), &(cur[i].y)); 否则将产生输入错误
  50. scanf("%lf %lf", &(cur[i].x), &(cur[i].y));
  51. }
  52.  
  53. int k = ; // 抽象出的边的总数
  54. // 遍历所有的点对
  55. for(int i = ; i <= n; ++i) // 将坐标抽象为图中的顶点
  56. {
  57. for(int j = i+; j <= n; ++j) // 连接两点的线段抽象成边
  58. {
  59. edge[k].a = i; // 该边的两个顶点编号
  60. edge[k].b = j;
  61. edge[k].cost = sqrt((cur[j].x-cur[i].x)*(cur[j].x-cur[i].x)+(cur[j].y-cur[i].y)*(cur[j].y-cur[i].y));
  62. ++k;
  63. }
  64. }
  65. sort(edge+, edge+k, cmp); // 对边按权值递增排序
  66.  
  67. // 最小生成树模板
  68. double ans = ;
  69. for(int i = ; i < k; ++i)
  70. {
  71. int ra = findRoot(edge[i].a);
  72. int rb = findRoot(edge[i].b);
  73. if(ra != rb)
  74. {
  75. Tree[ra] = rb;
  76. ans += edge[i].cost;
  77. }
  78. }
  79.  
  80. printf("%.2lf\n", ans);
  81. }
  82.  
  83. return ;
  84. }

Freckles (最小生成树)的更多相关文章

  1. UVA 10034 Freckles 最小生成树

    虽然是道普通的最小生成树题目,可还是中间出了不少问题,暴露的一个问题是不够细心,不够熟练.所以这篇博客就当记录一下bug吧. 代码一:kruskal #include<stdio.h> # ...

  2. 题目1144:Freckles(最小生成树进阶)

    题目链接:http://ac.jobdu.com/problem.php?pid=1144 详解链接:https://github.com/zpfbuaa/JobduInCPlusPlus 参考代码: ...

  3. 10034 - Freckles 克鲁斯克尔最小生成树!~

    /* 10034 - Freckles 克鲁斯克尔最小生成树!- */ #include<iostream> #include<cstdio> #include<cmat ...

  4. 九度OJ 1144:Freckles(斑点) (最小生成树)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:1538 解决:760 题目描述: In an episode of the Dick Van Dyke show, little Richi ...

  5. poj 2560 Freckles

    题目连接 http://poj.org/problem?id=2560 Freckles Description In an episode of the Dick Van Dyke show, li ...

  6. 最小生成树之Kruskal

    模板题,学习一下最小生成树的Kruskal算法 对于一个连通网(连通带权图,假定每条边上的权均为大于零的实数)来说,每棵树的权(即树中所有边的权值总和)也可能不同 具有权最小的生成树称为最小生成树 生 ...

  7. freckles

    题目描述: In an episode of the Dick Van Dyke show, little Richie connects the freckles on his Dad's back ...

  8. POJ2560 Freckles

    Time Limit: 1000MS   Memory Limit: 65536KB   64bit IO Format: %lld & %llu Description In an epis ...

  9. 【九度OJ】题目1144:Freckles 解题报告

    [九度OJ]题目1144:Freckles 解题报告 标签(空格分隔): 九度OJ 原题地址:http://ac.jobdu.com/problem.php?pid=1144 题目描述: In an ...

随机推荐

  1. struts2文件上传(多文件)文件下载

    一 文件上传 1.环境要求 commons-fileupload-xxx.jar commons-io-xxx.jar 2.准备jsp页面 单 <%@ page language="j ...

  2. python格式化输出%,while else

    一.格式化输出% 需求:自我介绍模板 #格式化输出 # % s d %占位符,占个位置 s(字符串),d(数字)替换内容的类型 name = input('请输入姓名:') age = input(' ...

  3. RQNOJ--160 竞赛真理(01背包)

    题目http://www.rqnoj.cn/problem/160 分析:这是一个01背包问题,对于每一道题目,都有两个选择"做"或者"不做". 但是唯一不同的 ...

  4. Markdown 格式标记符号说明

    Markdown 格式标记符号说明 1. 标题 在行首插入 1 到 6个#,分别表示标题 1 到标题 6 # 这是标题1 ## 这是标题1 ###### 这是标题6 点击保存后的效果: 标题1 标题2 ...

  5. 【ZJOI2007】【BZOJ1059】矩阵游戏 匈牙利算法

    题目描述 小Q是一个非常聪明的孩子,除了国际象棋,他还很喜欢玩一个电脑益智游戏——矩阵游戏.矩阵游戏在一个N*N黑白方阵进行(如同国际象棋一般,只是颜色是随意的).每次可以对该矩阵进行两种操作:行交换 ...

  6. js身份证号码验证(小程序版)

    参考知乎专栏文章https://zhuanlan.zhihu.com/p/22949023 <view class='bgw'> <form> ...... <view ...

  7. Delphi 设计模式:《HeadFirst设计模式》Delphi2007代码---工厂模式之工厂方法[转]

      1   2{<HeadFirst设计模式>工厂模式之工厂方法 }   3{ 产品类                              }   4{ 编译工具 :Delphi20 ...

  8. Luogu P1311 选择客栈(前缀和)

    P1311 选择客栈 题意 题目描述 丽江河边有\(n\)家很有特色的客栈,客栈按照其位置顺序从\(1\)到\(n\)编号.每家客栈都按照某一种色调进行装饰(总共\(k\)种,用整数\(0\)~\(k ...

  9. Leetcode459.Repeated Substring Pattern重复的子字符串

    给定一个非空的字符串,判断它是否可以由它的一个子串重复多次构成.给定的字符串只含有小写英文字母,并且长度不超过10000. 示例 1: 输入: "abab" 输出: True 解释 ...

  10. Linux命令CURL用法

    Curl是一个命令行方式下传输数据的开源传输工具,支持多种协议包括:FTP,HTTP,HTTPS,IMAP,POP3,TELNET等.同样支持HTTP POST方法,PUT方法,FTP上传,cooki ...