POJ2560_Freckles_最小生成树
来源:互联网 发布:淘宝隐藏优惠券领取 编辑:程序博客网 时间:2024/05/29 18:54
- -刚开始我看输入把我下了一跳,平面上n个点怎么遍历啊。后来才发现自己二到忘记看规模了,n<100,直接枚举就可以啊......
然后就是裸的最小生成树的Kruskal算法
悲催的是自己连这个都没有一遍过对自己的水平无语了
- -好了吐槽结束
Kruskal算法非常的经典,而且形式也比较固定,所以就懒得写注释了
不过需要提醒的是sort函数,我又忘了cmp如何定义是升序还是降序了...囧
又百度了一下,记住sort默认是升序的,是按Operator<来排序的,以后不能再忘了
Freckles
Time Limit: 1000MS Memory Limit: 65536KTotal Submissions: 6029 Accepted: 3042
Description
In an episode of the Dick Van Dyke show, little Richie connects the freckles on his Dad's back to form a picture of the Liberty Bell. Alas, one of the freckles turns out to be a scar, so his Ripley's engagement falls through.
Consider Dick's back to be a plane with freckles at various (x,y) locations. Your job is to tell Richie how to connect the dots so as to minimize the amount of ink used. Richie connects the dots by drawing straight lines between pairs, possibly lifting the pen between lines. When Richie is done there must be a sequence of connected lines from any freckle to any other freckle.
Consider Dick's back to be a plane with freckles at various (x,y) locations. Your job is to tell Richie how to connect the dots so as to minimize the amount of ink used. Richie connects the dots by drawing straight lines between pairs, possibly lifting the pen between lines. When Richie is done there must be a sequence of connected lines from any freckle to any other freckle.
Input
The first line contains 0 < n <= 100, the number of freckles on Dick's back. For each freckle, a line follows; each following line contains two real numbers indicating the (x,y) coordinates of the freckle.
Output
Your program prints a single real number to two decimal places: the minimum total length of ink lines that can connect all the freckles.
Sample Input
31.0 1.02.0 2.02.0 4.0
Sample Output
3.41
#include<stdio.h>#include<string.h>#include<math.h>#include<algorithm>using namespace std;typedef struct MyStruct{double x,y;}NODE;typedef struct MyStruct2{int u,v;double dis;}EDGE;NODE point[102];EDGE edge[10010];int parent[102];double find_distance(NODE a,NODE b){return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));}int find_parent(int p){if (parent[p]!=p){parent[p]=find_parent(parent[p]);}return parent[p];}int find_merge(EDGE x){int a=find_parent( x.u);int b=find_parent(x.v); if (a!=b){parent[a]=b;return 1;}return 0;}bool cmp(EDGE a,EDGE b){return a.dis<b.dis;}int main(){int n,i,j,k,counter;double ans;while (scanf("%d",&n)!=EOF){for ( i = 0; i < n; i++){scanf("%lf%lf",&point[i].x,&point[i].y);parent[i]=i;}k=0;for ( i = 0; i < n; i++){for ( j = i+1; j < n; j++){edge[k].u=i;edge[k].v=j;edge[k].dis=find_distance(point[i],point[j]);k++;}}sort(edge,edge+k,cmp);ans=0;counter=0;for ( i = 0; i < k; i++){if (find_merge(edge[i])){ans+=edge[i].dis;counter++;}if (counter==n-1){break;}}printf("%.2lf\n",ans);}return 0;}
- POJ2560_Freckles_最小生成树
- 最小比例 最小生成树
- 最小生成树&&次最小生成树
- 最小生成生成树计数
- 树+最小生成树
- 最小生成树
- 最小生成树 MST
- 最小生成树Kruskal
- kruskal 最小生成树
- 最小生成树
- 最小生成树
- 最小生成树
- 最小生成树
- 最小生成树 MST
- 最小生成树问题
- 最小生成树
- 最小生成树
- 最小生成树
- 在已排序的数组中寻找和是给定值的两项,要求时间复杂度为O(n)
- 请问得到四元数后怎么计算YAW,ROLL,PITCH?
- Sobel算子及cvSobel(二)
- 通过WebService上传任何类型的文件
- Jquery11_仿QQ右下方提示
- POJ2560_Freckles_最小生成树
- 原创和伪原创你怎么看?
- 开发框架的选择和设计经验谈
- Python异常处理体系简介
- 成都java培训这些你都做到了成功离你不远了
- 23中设计模式总结
- MySQL和PostgreSQL对比
- 【CPU常见故障】
- Flex 与 javascript通信