hdu 1875 畅通工程再续
2015-08-24 16:11
405 查看
http://acm.hdu.edu.cn/showproblem.php?pid=1875
每组数据首先是一个整数C(C <= 100),代表小岛的个数,接下来是C组坐标,代表每个小岛的坐标,这些坐标都是 0 <= x, y <= 1000的整数。
2
10 10
20 20
3
1 1
2 2
1000 1000
oh!
最小生成树+并查集
kruskai算法
注意应该舍去距离小于10和大于1000的数据,但并不是出现小于10或大于1000 的数据就输出0h!,应该在舍去距离小于10和大于1000的数据,再判断图是不是连通的就可以了
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
22
10 10
20 20
3
1 1
2 2
1000 1000
Sample Output
1414.2oh!
最小生成树+并查集
kruskai算法
注意应该舍去距离小于10和大于1000的数据,但并不是出现小于10或大于1000 的数据就输出0h!,应该在舍去距离小于10和大于1000的数据,再判断图是不是连通的就可以了
[code]#include<iostream> #include <cstdio> #include <algorithm> #include <string.h> #include <math.h> using namespace std; const int N = 105; int coor [2], n, father ; struct Node { int x, y; int len; friend bool operator < (const Node &a, const Node &b) { return a.len < b.len; } void fun() { int a = (coor[x][0] - coor[y][0]), b = (coor[x][1] - coor[y][1]); len = ( a*a + b*b); } }node[10000]; int find(int x) { if (x != father[x]) { father[x] = find(father[x]); } return father[x]; } int main() { #ifndef ONLINE_JUDGE freopen("1.txt", "r", stdin); #endif int t, i, j, k, a, b; double ans; cin >> t; while(t--) { scanf("%d", &n); for (i = 0; i < n; i++) { father[i] = i; scanf("%d%d", &coor[i][0], &coor[i][1]); } for (i = k = 0; i < n; i++) { for (j = i+1; j < n; j++) { node[k].x = i; node[k].y = j; node[k].fun(); k++; } } ans = 0; sort(node, node + k); for (i = 0; i < k; i++) { a = find(node[i].x); b = find(node[i].y); if (a == b || node[i].len < 100 || node[i].len > 1000000) { continue; } ans += sqrt(node[i].len); father[a] = b; } a = 0; for (i = 0; i < n; i++) { if (i == father[i]) { a++; } } if (a > 1) { cout << "oh!\n"; continue; } ans *= 100.0; printf("%.1lf\n", ans); } return 0; }
相关文章推荐
- poj 3252 Round Numbers
- 使用CryptoAPI获取证书扩展属性之一:“基本约束”
- 2015-08-24
- UIActionSheet的常见用法
- Django项目 实例 日记
- springboot 开发入门,及问题汇总
- Apache 和 nginx 之间的配置
- 【其他】MySql常用命令
- 关于C++中的虚拟继承的一些总结
- 根据STL 学习数据结构
- JavaScript:时间日期格式验证大全
- Office 365 IT Professional——利用PowerShell更改Password 永不过期时间和提醒时间
- Linux now!--网络配置
- 简道云--Excel导入和导出
- 简道云--权限与流程设置
- MVC控制器
- 谁让APP工程师产生了泡沫?
- Java 内部类种类及使用解析
- Android 多线程处理之多线程用法大集合 第 1 页
- .net2.0+ Winform项目实现弹出容器层