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的整数。
 

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
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 CAD画图线性数字不居中怎么办 3d立体画笔堵塞怎么办 龋齿树脂填充老化后怎么办 小孩补过的牙疼怎么办 颜料弄到墙纸上怎么办 4岁的宝宝不爱涂色怎么办 oppo手机截图存不到相册怎么办 做的ih5保存不了怎么办 小偷偷东西发现后逃跑了怎么办? 网上有人传迷信诅咒怎么办 颜料粘在衣服上怎么办 家里有小偷撬锁怎么办 在家有人在撬门怎么办 6个月的宝宝腹泻怎么办 六个月大的宝宝拉肚子怎么办 六个月宝宝着凉拉肚子怎么办 六个月婴儿着凉拉肚子怎么办 怀孕六个月着凉拉肚子怎么办 六个月的婴儿消化不好怎么办 六个月婴儿不好好吃奶怎么办 六个月婴儿消化不好怎么办 六个月婴儿肠胃不好怎么办 受了惊吓后睡眠不好怎么办 宝宝夏季吃饭不爱带围嘴怎么办 3岁宝宝爱看电视怎么办 新生儿晚上哭闹不睡觉怎么办 档案丢了怎么办失业证 三岁宝宝不合群怎么办 阴唇手术半月了疤痕增生怎么办 宝宝小阴唇黏连怎么办 6个月宝宝阴唇粘连怎么办? 高一孩子不爱上学怎么办 3岁宝宝外阴发红怎么办 40爸妈离婚我该怎么办 小儿吃糖卡住了怎么办 额头撞墙上肿了怎么办 宝宝额头撞肿了怎么办 小孩额头撞肿了怎么办 宝宝撞到额头肿了怎么办 小孩子上一年级语文很差了怎么办? 楼下说小孩太吵怎么办