HDU 1875 畅通工程再续(最小生成树-Kruskal算法)
来源:互联网 发布:知源中学复读 编辑:程序博客网 时间:2024/05/26 17:44
畅通工程再续
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 31755 Accepted Submission(s): 10407
Problem Description
相信大家都听说一个“百岛湖”的地方吧,百岛湖的居民生活在不同的小岛中,当他们想去其他的小岛时都要通过划小船来实现。现在政府决定大力发展百岛湖,发展首先要解决的问题当然是交通问题,政府决定实现百岛湖的全畅通!经过考察小组RPRush对百岛湖的情况充分了解后,决定在符合条件的小岛间建上桥,所谓符合条件,就是2个小岛之间的距离不能小于10米,也不能大于1000米。当然,为了节省资金,只要求实现任意2个小岛之间有路通即可。其中桥的价格为 100元/米。
Input
输入包括多组数据。输入首先包括一个整数T(T <= 200),代表有T组数据。
每组数据首先是一个整数C(C <= 100),代表小岛的个数,接下来是C组坐标,代表每个小岛的坐标,这些坐标都是 0 <= x, y <= 1000的整数。
每组数据首先是一个整数C(C <= 100),代表小岛的个数,接下来是C组坐标,代表每个小岛的坐标,这些坐标都是 0 <= x, y <= 1000的整数。
Output
每组输入数据输出一行,代表建桥的最小花费,结果保留一位小数。如果无法实现工程以达到全部畅通,输出”oh!”.
Sample Input
2210 1020 2031 12 21000 1000
Sample Output
1414.2oh!
思路挺简单的,就是kruskal算法就可以解出来。遇到特别纠结的一点就是我的数组开小了,运行结果居然给我报TLE错误,然我找了半天!!!
AC代码:
#include<cstdio>#include<cstring>#include<cmath>#include<algorithm>using namespace std;const int maxn = 100 + 10;const int emax = 1e4;double w[emax];int r[emax]; //边的序号 int x[maxn],y[maxn];int pre[maxn];int C;int k;int u[emax],v[emax];double sum ;bool cmp(int i, int j){return w[i] < w[j];}int find(int i){ int t = i; while(t != pre[t]){ t = pre[t]; } int tmp = i, j; while(pre[tmp] != t){ j = pre[tmp]; pre[tmp] = t; tmp = j; } return t;}void kruskal(){for(int i = 0 ; i < C; i++) pre[i] = i;sum = 0;int cnt = 1;for(int i = 0; i < k; i++){int fx = find(u[r[i]]) , fy = find(v[r[i]]);if(fx != fy){pre[fx] = fy;sum += w[r[i]];if(++cnt >= C) break;}}if(cnt == C)printf("%.1lf\n",sum*100);else printf("oh!\n");}int main(){int T;scanf("%d",&T);while(T--){scanf("%d",&C);for(int i = 0; i < C; i++)scanf("%d%d",&x[i],&y[i]);k = 0;for(int i = 0; i < C; i++){for(int j = i + 1; j < C; j++){double x1 = abs(x[i]-x[j]);double y1 = abs(y[i]-y[j]);double t = sqrt(x1*x1 + y1*y1);if(t < 10 || t > 1000) continue;u[k] = i , v[k] = j;r[k] = k;w[k++] = t;}}sort(r,r + k,cmp);kruskal();}return 0;}
阅读全文
0 0
- hdu 1875 畅通工程再续(kruskal算法计算最小生成树)
- 【HDU 1875】畅通工程再续(最小生成树,kruskal算法)
- HDU 1875 畅通工程再续(最小生成树-Kruskal算法)
- hdu 1875 畅通工程再续(最小生成树Kruskal)
- HDU 1875 畅通工程再续【最小生成树Kruskal】
- HDU 1875 畅通工程再续【最小生成树,Prime算法+Kruskal算法】
- hdu 畅通工程再续(最小生成树)(Prim算法 && Kruskal算法)
- hdu 1863 畅通工程 (最小生成树kruskal 算法)
- HDU-1875 畅通工程再续-1162 - Eddy's picture(最小生成树,Kruskal 算法实现 )
- hdu1875 畅通工程再续(最小生成树kruskal算法)
- HDU 1875 畅通工程再续(最小生成树 kruskal)
- HDU 1875 畅通工程再续(最小生成树-Kruskal)
- HDU 1875 畅通工程再续(最小生成树-Kruskal)
- HDU---1875 畅通工程再续 最小生成树 (kruskal)
- HDU 1879 继续畅通工程(最小生成树 Kruskal算法)
- HDU 1863 畅通工程 kruskal算法 最小生成树
- hdu 还是畅通工程 (基础)(最小生成树)(Prim算法 && Kruskal算法)
- hdu 1233 还是畅通工程 最小生成树(prim算法 + kruskal算法)
- Kruskal算法
- jquery中select 的change事件实例
- Easyui笔记:jquery执行append后input的验证失效解决方案
- kafka实践
- 关于图片拉伸的方法
- HDU 1875 畅通工程再续(最小生成树-Kruskal算法)
- 菜鸟学习数据结构算法之路之约瑟夫环问题(循环链表)
- python下的redis连接
- Netty4.x中文教程系列(五)编解码器Codec
- 欢迎使用CSDN-markdown编辑器
- 几种使用itext生成pdf的方式
- 无法忍受sbt构建scala的龟速,用maven构建spark应用吧
- Android缓存策略LruCahe源码解析,Lru到底是怎么算的?
- 机器学习相关资料