HDU-1162-Eddy's picture
题目传送门:http://acm.hdu.edu.cn/showproblem.php?pid=1162
题意:
最小生成树
1 #include<iostream> 2 #include<algorithm> 3 #include<cmath> 4 using namespace std; 5 6 const int maxn = 100+10; 7 int far[maxn]; 8 int n, m; 9 int k; 10 struct Edge 11 { 12 const bool operator<(Edge &n)const 13 { 14 return value<n.value; 15 } 16 int start; 17 int end; 18 double value; 19 }edge[maxn*maxn]; 20 21 bool cmp(struct Edge &a, struct Edge &b) 22 { 23 return a.value<b.value; 24 } 25 26 void init() 27 { 28 int i, j; 29 for(i=0; i<=n; i++) 30 far[i] = i; 31 } 32 33 int find(int a) 34 { 35 if(far[a]!=a) 36 far[a] = find(far[a]); 37 return far[a]; 38 } 39 40 void Union(int a, int b) 41 { 42 a = find(a); 43 b = find(b); 44 if(a != b) 45 far[a] = b; 46 } 47 48 double kruskal() 49 { 50 init(); 51 sort(edge,edge+n*(n-1)+1,cmp); 52 double sum = 0; 53 int count = 0; 54 for(int i=1; i<=n*(n-1) && count<n; i++) 55 { 56 int a=edge[i].start; 57 int b=edge[i].end; 58 if(find(a)!=find(b)) 59 { 60 Union(a, b); 61 sum+=edge[i].value; 62 count++; 63 } 64 } 65 return sum; 66 } 67 68 int main() 69 { 70 double a[maxn], b[maxn]; 71 while(cin>>n) 72 { 73 //m = n*(n-1)/2; 74 75 for(int i=1; i<=n; i++) 76 { 77 scanf("%lf%lf",&a[i], &b[i]); //因为是无向图,所以要两次赋值 78 } 79 k=1; 80 double c; 81 for(int i=1; i<n; i++) 82 { 83 for(int j=i+1; j<=n; j++) 84 { 85 //if(i != j) 86 //{ 87 c = sqrt((a[i]-a[j])*(a[i]-a[j])+(b[i]-b[j])*(b[i]-b[j])); 88 edge[k].start = i; 89 edge[k].end = j; 90 edge[k++].value = c; 91 edge[k].start = j; 92 edge[k].end = i; 93 edge[k++].value = c; 94 //} 95 } 96 } 97 printf("%.2lf\n", kruskal()); 98 } 99 return 0; 100 }
转载于:https://www.cnblogs.com/ruihua852/archive/2012/09/06/2673008.html
HDU-1162-Eddy's picture相关推荐
- HDU 1162 Eddy's picture (最小生成树)(java版)
Eddy's picture 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1162 --每天在线,欢迎留言谈论. 题目大意: 给你N个点,求把这N个点 ...
- HDU ACM 1162 Eddy's picture
http://acm.hdu.edu.cn/showproblem.php?pid=1162 输入一个整数n,表示点的个数. 接下来n行,每行有两个浮点数表示点的x坐标y坐标. 构造一棵最小生成树. ...
- HDU - 2204 Eddy‘s爱好(尚未完全解决)
HDU - 2204 Eddy's爱好 题意: 给你一个正整数N,确定在1到N之间有多少个可以表示成M^K(K>1)的数 题解: 参考题解: 我们先举例找找规律 1~10以内2的次方有多少个?有 ...
- hdu 1210 Eddy's 洗牌问题
hdu 1210 Eddy's 洗牌问题 Problem DescriptionEddy是个ACMer,他不仅喜欢做ACM题,而且对于纸牌也有一定的研究,他在无聊时研究发现,如果他有2N张牌,编号为1 ...
- hdu 2204 Eddy's爱好
求$[1,n]$种有多少正整数可以表示为$p^q$的形式,其中$p,q$为正整数,且$q \ge 2$ $1 \le n \le 10^{18}$ 1. 若$p^q \le n$,则$\forall ...
- (kruskal算法复习+模板)Eddy's picture
题目: Eddy begins to like painting pictures recently ,he is sure of himself to become a painter.Every ...
- HDU 2204 Eddy's爱好(容斥原理)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2204 解题报告:输入一个n让你求出[1,n]范围内有多少个数可以表示成形如m^k的样子. 不详细说了, ...
- hdu 1161 Eddy's mistakes
http://acm.hdu.edu.cn/showproblem.php?pid=1161 本题主要运用的就是大小写的转换: 我写的代码: #include<iostream> #inc ...
- Hdu - 1210 - Eddy's 洗牌问题
因为考试所以最近都没有做什么题.想不到这题都卡(~~~~(>_<)~~~~ ),看来太久没有做题感觉变迟钝了,当然也有原因是找规律的题做得比较少,所以就这样了,看来要快快调整好,好好努力才 ...
- hdu 1828 pku 1177 Picture
这困扰我N久的题目,终于过了. 求N个矩形的周长并,一开始觉得太遥不可及了,感觉好复杂 ,总想先搞懂计算的方法,再看大牛的方法,可是N久之后,对那个方法还是一知半解: 今天结合了代码还有下面俩副图之后 ...
最新文章
- kd树的根节点_kd树总结
- javascript的性能优化tips
- mysql函数时分秒转换_mysql函数 秒转换成时分秒
- ZooKeeper入门(三)zookeeper的Watcher机制
- access denied for_abm怎么样?ACCESS集团携8大国际品牌在进博会首秀,展示abmr 硬核实力!...
- QT每日一练day10:设计一个登陆界面
- linux dhcp rpm 安装
- 《只管去做》-如何做靠谱的年度计划
- C++中函数指针数组的使用
- [Microsoft][ODBC 驱动程序管理器] 在指定的 DSN 中,驱动程序和应用程序之间的体系结构不匹配...
- unix系统发展史3
- Linux下wps文档结构图,如何在Word中设置文档结构图
- IDEA若依框架新建模块
- [Swift]LeetCode882. 细分图中的可到达结点 | Reachable Nodes In Subdivided Graph
- 使用递归判断字符串是否回文
- PHP - 垃圾回收机制收集
- 针对目前windows系统的所有勒索病毒补丁和安全工具
- ubuntu20.04 ros 采集velodyne激光雷达数据
- 串口、COM口、UART口, TTL、RS-232、RS-485的区别
- 云服务器可以用来做什么?