杭电 1162 kruskal()算法 最小生成树
来源:互联网 发布:网络时间获取失败 编辑:程序博客网 时间:2024/06/05 17:07
一道稍微有点难度的最小生成树的题,,,仔细想想的话,还是很容易做出来的。。。题目:
Eddy's picture
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?
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.
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
31.0 1.02.0 2.02.0 4.0
Sample Output
3.41
#include <iostream>#include <algorithm>#include <cstdio>#include <cmath>using namespace std;const int N=10005;double leftt[N],rightt[N];//double value[N];int father[N],r[N];struct point{ int x,y; double value;}aa[10005];int cmp(const int i,const int j){return aa[i].value<aa[j].value;}int find(int x){ if(father[x]!=x) father[x]=find(father[x]); return father[x];}int main(){ int n; while(scanf("%d",&n)!=EOF){ for(int i=0;i<N;++i){ father[i]=i;r[i]=i;aa[i].value=0.0; } /*for(int i=0;i<10;++i) {printf("%d ",r[i]);}*/ for(int i=0;i<n;++i){ scanf("%lf%lf",&leftt[i],&rightt[i]); } int k=0; for(int i=0;i<n;++i){ for(int j=0;j<n;++j){ if(i!=j) {aa[k].value=sqrt((leftt[i]-leftt[j])*(leftt[i]-leftt[j])+(rightt[i]-rightt[j])*(rightt[i]-rightt[j])); aa[k].x=i;aa[k].y=j;k++; } } } //printf("k===%d\n",k); /*for(int i=0;i<k;++i) {printf("%d ",r[i]);}*/ sort(r,r+k,cmp); /*for(int i=0;i<k;++i) {printf("%d ",r[i]);} printf("\n");*/ double sum=0; for(int i=0;i<k;++i){ int e=r[i];int x=find(aa[e].x); int y=find(aa[e].y);if(x!=y){sum+=aa[e].value; /*printf("x==%d\n y==%d\n",x,y); printf("sum===%.2lf\n",sum);*/ father[x]=y;} } printf("%.2lf\n",sum); } return 0;}
- 杭电 1162 kruskal()算法 最小生成树
- 杭电 1233 最小生成树 kruskal()算法
- 杭电1233最小生成树kruskal
- 杭电oj-1102 Constructing Roads(最小生成树Kruskal算法)
- 最小生成树算法(prim&kruskal)
- poj1251最小生成树(kruskal算法)
- 最小生成树 kruskal(算法)
- 最小生成树(Kruskal算法)--poj2421
- 最小生成树(kruskal算法)
- 最小生成树(Kruskal算法)
- Kruskal算法(求最小生成树)
- 最小生成树2(Kruskal算法)
- 最小生成树算法(2)------------Kruskal
- Kruskal 算法(最小生成树)
- 最小生成树算法[Prime/(Kruskal)]
- 最小生成树(二)...Kruskal算法
- kruskal最小生成树(MST)算法
- 最小生成树(kruskal算法)
- C++ String knowledge
- 算法入门之队列的链式表示
- Django项目中集成富文本编辑器的通用方法,适合KindEditor,xhEditor,NicEditor,wymeditor等
- 现在开始等
- Bitmap序列化(将BitmapData保存为原生Binary/ByteArray),AS3保存图像的方法
- 杭电 1162 kruskal()算法 最小生成树
- DropDownList添加ToolTip或者title属性
- HTTP 通信
- 神州数码Portlet开发培训
- j74sJpo_qgPFXRPYm.=OJ_qgPNOJ_qPYm.NaxOJpfJE
- Ruby使用Win32API来操作鼠标
- Android之APK文件签名——keytool和jarsigner
- c#如何进行时间值的比较
- 【Php】上个月第一天和最后一天的日期