最小生成树

原创 2015年07月06日 18:40:04
Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 2835    Accepted Submission(s): 1377


Problem Description
Eddy begins to like painting pictures recently ,he is sure of himself to become a painter.Every day Eddy draws pictures in his small room, and he usually puts out his newest pictures to let his friends appreciate. but the result it can be imagined, the friends are not interested in his picture.Eddy feels very puzzled,in order to change all friends 's view to his technical of painting pictures ,so Eddy creates a problem for the his friends of you.
Problem descriptions as follows: Given you some coordinates pionts on a drawing paper, every point links with the ink with the straight line, causes all points finally to link in the same place. How many distants does your duty discover the shortest length which the ink draws?
 

Input
The first line contains 0 < n <= 100, the number of point. For each point, a line follows; each following line contains two real numbers indicating the (x,y) coordinates of the point. 

Input contains multiple test cases. Process to the end of file.
 

Output
Your program prints a single real number to two decimal places: the minimum total length of ink lines that can connect all the points. 
 

Sample Input
3 1.0 1.0 2.0 2.0 2.0 4.0
 

Sample Output
3.41
 

ac代码:

  1. #include <iostream>  
  2. #include <algorithm>  
  3. #include <cstdio>  
  4. #include <cmath>  
  5. using namespace std;  
  6. const int N=10005;  
  7. double leftt[N],rightt[N];  
  8. //double value[N];  
  9. int father[N],r[N];  
  10. struct point{  
  11.   int x,y;  
  12.   double value;  
  13. }aa[10005];  
  14. int cmp(const int i,const int j){  
  15.     return aa[i].value<aa[j].value;  
  16. }  
  17. int find(int x){  
  18.   if(father[x]!=x)  
  19.       father[x]=find(father[x]);  
  20.   return father[x];  
  21. }  
  22. int main(){  
  23.   int n;  
  24.   while(scanf("%d",&n)!=EOF){  
  25.       for(int i=0;i<N;++i){  
  26.         father[i]=i;  
  27.         r[i]=i;  
  28.         aa[i].value=0.0;  
  29.       }  
  30.        /*for(int i=0;i<10;++i) 
  31.       {printf("%d  ",r[i]);}*/  
  32.       for(int i=0;i<n;++i){  
  33.         scanf("%lf%lf",&leftt[i],&rightt[i]);  
  34.       }  
  35.       int k=0;  
  36.       for(int i=0;i<n;++i){  
  37.           for(int j=0;j<n;++j){  
  38.               if(i!=j)  
  39.               {aa[k].value=sqrt((leftt[i]-leftt[j])*(leftt[i]-leftt[j])+(rightt[i]-rightt[j])*(rightt[i]-rightt[j]));  
  40.                 aa[k].x=i;  
  41.                 aa[k].y=j;  
  42.                 k++;  
  43.               }  
  44.           }  
  45.       }  
  46.       //printf("k===%d\n",k);  
  47.       /*for(int i=0;i<k;++i) 
  48.       {printf("%d  ",r[i]);}*/  
  49.       sort(r,r+k,cmp);  
  50.       /*for(int i=0;i<k;++i) 
  51.       {printf("%d  ",r[i]);} 
  52.       printf("\n");*/  
  53.       double sum=0;  
  54.       for(int i=0;i<k;++i){  
  55.         int e=r[i];  
  56.         int x=find(aa[e].x);  
  57.          int y=find(aa[e].y);  
  58.         if(x!=y){  
  59.             sum+=aa[e].value;  
  60.           /*printf("x==%d\n  y==%d\n",x,y); 
  61.           printf("sum===%.2lf\n",sum);*/  
  62.           father[x]=y;  
  63.         }  
  64.       }  
  65.       printf("%.2lf\n",sum);  
  66.   }  
  67.   return 0;  
  68. }  
版权声明:本文为博主http://www.feixueteam.net原创文章,未经博主允许不得转载。

比较好的题目“典型的最小生成树”

Watering Hole My Tags   (Edit)   Source : USACO 2008 Open  ...
  • struggle_mind
  • struggle_mind
  • 2014年05月07日 21:33
  • 1040

最小生成树总结

一.最小生成树问题 给定一张图,图中有许多的节点还有许多长度不同的边将这些点点相互连接,找出连接所有点的最短方式就是最小生成树,可以证明,这样一种最小的情况是不会出现环的,由于所有的无环图都可以看做...
  • u013555159
  • u013555159
  • 2016年05月07日 12:13
  • 848

最小生成树计数-Kruskal+Matrix_Tree定理

/* *算法引入: *给定一个含有N个结点M条边的无向图,求它最小生成树的个数t(G); * *算法思想: *抛开“最小”的限制不看,如果只要求求出所有生成树的个数,是可以利用Matrix-...
  • Jarily
  • Jarily
  • 2013年05月08日 20:55
  • 5860

贪心算法——Prim最小生成树

1、首先介绍一下什么是贪心算法: 贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解。ps:不懂得话可...
  • baidu_28944591
  • baidu_28944591
  • 2016年06月26日 16:50
  • 1765

hdu 1233 (最小生成树 简单例题)

还是畅通工程 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total S...
  • qq_33406883
  • qq_33406883
  • 2016年07月23日 15:10
  • 1187

判断最小生成树的唯一性

先用kruskal算法算出最小生成树,并把最小生成树的边记录下来。然后依次枚举删除边,用其他的边再次使用kruskal算法算出最小生成树。如果算出的代价和原来的相同,则不唯一,否则唯一。另外当我们删除...
  • ECNU_LZJ
  • ECNU_LZJ
  • 2016年12月13日 19:38
  • 1564

最小生成树(prim算法与kruskal算法)(模板)

th写的总结,很不错,转载一下:点击打开链接   首先说一下什么是树:     1、只含一个根节点     2、任意两个节点之间只能有一条或者没有线相连     3、任意...
  • zwj1452267376
  • zwj1452267376
  • 2015年08月13日 08:54
  • 1506

最小生成树题集

A题,L题:poj2421 简单题 题意:题目这么长,其实大部分都在扯逼-_-。以字母代替点,每行输入字母,与其相连的个数,以及相连的具体点和其距离,计算全联通最小距离。 题解:只需要把字母距离化...
  • qq_33199236
  • qq_33199236
  • 2016年08月01日 20:21
  • 1552

最小生成树及其构造方法

最小生成树的概念以及怎么样利用普利姆算法和克鲁斯卡尔算法去构造一个图的最小生成树。利用通俗易懂的文字去一步步描述了普利姆算法和克鲁斯卡尔算法的精华并且举例说明了核心思想...
  • qq122627018
  • qq122627018
  • 2016年07月16日 09:32
  • 2047

最小生成树(贪心算法)

最小生成树问题——连接n个针脚,可以使用n-1根连线,每个连线连接两个针脚,使得所使用的连线长度最短     抽象为图问题,一个连通无向图G = (V, E),V是针脚的集合,E是针脚之间的可能连接...
  • huangwwu11
  • huangwwu11
  • 2015年04月15日 23:38
  • 540
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:最小生成树
举报原因:
原因补充:

(最多只允许输入30个字)