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

 1 /*
 2 10034 - Freckles
 3 克鲁斯克尔最小生成树!~
 4 */
 5 #include<iostream>
 6 #include<cstdio>
 7 #include<cmath>
 8 #include<algorithm>
 9 using namespace std;
10
11 struct node{
12    double x, y;
13 };
14
15 struct tree{
16    int u, v;
17    double d;
18 };
19
20 node nd[105];
21 int f[105];
22 tree tt[5010];
23
24 bool cmp(tree a, tree b){
25    return a.d < b.d;
26 }
27
28 int getFather(int x){
29    return x==f[x] ? x : f[x]=getFather(f[x]);
30 }
31
32 int Union(int a, int b){
33    int fa=getFather(a), fb=getFather(b);
34    if(fa!=fb){
35       f[fa]=fb;
36       return 1;
37    }
38    return 0;
39 }
40
41 int main(){
42    int t;
43    cin>>t;
44    while(t--){
45       int n;
46       cin>>n;
47       for(int i=1; i<=n; ++i){
48          cin>>nd[i].x>>nd[i].y;
49          f[i]=i;
50       }
51       int cnt=0;
52       for(int i=1; i<n; ++i)
53          for(int j=i+1; j<=n; ++j){
54             tt[cnt].u=i;
55             tt[cnt].v=j;
56             tt[cnt++].d=sqrt((nd[i].x-nd[j].x)*(nd[i].x-nd[j].x) + (nd[i].y-nd[j].y)*(nd[i].y-nd[j].y));
57          }
58       sort(tt, tt+cnt, cmp);
59       double sum=0.0;
60       for(int i=0; i<cnt; ++i){
61          if(Union(tt[i].u, tt[i].v))
62             sum+=tt[i].d;
63       }
64       printf("%.2lf\n", sum);
65       if(t) printf("\n");
66    }
67 }

10034 - Freckles 克鲁斯克尔最小生成树!~,布布扣,bubuko.com

时间: 2024-10-18 09:29:07

10034 - Freckles 克鲁斯克尔最小生成树!~的相关文章

UVA 10034 Freckles 【最小生成树】

题目链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=975 题意:裸的最小生成树 代码: #include <stdio.h> #include <iostream> #include <string.h> #include <algorithm> #include <math.

查找最小生成树:克鲁斯克尔算法(Kruskal)算法

一.算法介绍 Kruskal算法是一种用来查找最小生成树的算法,由Joseph Kruskal在1956年发表.用来解决同样问题的还有Prim算法和Boruvka算法等.三种算法都是贪心算法的应用.和Boruvka算法不同的地方是,Kruskal 算法在图中存在相同权值的边时也有效.最小生成树是一副连通加权无向图中一棵权值最小的生成树(minimum spanning tree,简称MST).生成树的权重是赋予生成树的每条边的权重之和.最小生成树具有 (V – 1) 个边,其中 V 是给定图中的

uva 10034 Freckles 最小生成树

#include <bits/stdc++.h> using namespace std; int n; double x[105],y[105]; double d[105]; int used[105]; double ma[105][105]; double mst(){ d[0] = 0.0; double ans = 0.0; for(int i = 0;i < n;i++){ double min = DBL_MAX; int minn; for(int j = 0;j &l

UVA 10034 Freckles

MST直接上代码了 #include <map> #include <set> #include <list> #include <cmath> #include <ctime> #include <deque> #include <stack> #include <queue> #include <cctype> #include <cstdio> #include <strin

1789 Truck History【最小生成树】

Truck History Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 21660   Accepted: 8419 Description Advanced Cargo Movement, Ltd. uses trucks of different types. Some trucks are used for vegetable delivery, other for furniture, or for brick

各种图论模型及其解答(转载)

原文转自Jelline blog http://blog.chinaunix.net/uid-9112803-id-411340.html //============================== 在做研究的过程中,发现其实以前觉得没什么用的数学模型或者图论模型,突然间变得非常有用起来.感叹于自己相关知识的不足,于是搜索相关知识进行学习,并分享. 这篇转载的文章对于从事网络方向研究的初级人员有一定帮助,譬如我.对于已经熟悉图论各模型.各细节的人可以直接关闭此网页离开. //=======

UvaOJ10369 - Arctic Network

1 /* 2 The first line of each test case contains 1 <= S <= 100, the number of satellite channels! 3 注意:S表示一共有多少个卫星,那么就是有 最多有S-1个通道! 然后将最小生成树中的后边的 S-1通道去掉就行了! 4 思路:最小生成树中的第 k 个最小边! 5 */ 6 //克鲁斯克尔算法..... 7 #include<iostream> 8 #include<cstdio

编程题目分类(剪辑)

1. 编程入门 2. 数据结构 3. 字符串 4. 排序 5. 图遍历 6. 图算法 7. 搜索:剪枝,启发式搜索 8. 动态规划/递推 9. 分治/递归 10. 贪心 11. 模拟 12. 算术与代数 13. 组合问题 14. 数论 15. 网格,几何,计算几何 [编程入门] PC 110101, uva 100, The 3n+1 problem, 难度 1 PC 110102, uva 10189, Minesweeper, 难度 1 PC 110103, uva 10137, The T

各种图论模型及其解答(转)

原文转自Jelline blog http://blog.chinaunix.net/uid-9112803-id-411340.html 摘要: 本文用另一种思路重新组织<图论及其应用>相关知识.首先,用通俗化语言阐述了如何对事物间联系的问题进行图论建模:接着从现实例子出发,给出 各种典型图论模型,每种图论模型对应于图论一个重要内容:再者,介绍相关知识对上述提到的图论模型涉及的问题进行解答:最后,补充一些图论其他知识,包括 图论分支.易混概念. 符号约定: Q(Question)表示对问题描