NYOJ 1875 畅通工程再续 (无节点间距离求最小生成树)
Description
Input
每组数据首先是一个整数C(C <= 100),代表小岛的个数,接下来是C组坐标,代表每个小岛的坐标,这些坐标都是 0 <= x, y <= 1000的整数。
Output
Sample Input
2
2
10 10
20 20
3
1 1
2 2
1000 1000
Sample Output
1414.2
oh! 求最小生成树基本思想
- 定义结构体保存两节点及其距离
- 对结构体排序(按两节点距离从小到大)
- 对边的数量进行查询,若两节点父节点不同则连接两父节点,记录边的大小sum及有效边的数量k
- 在循环中判断有效边数量,若等于节点数减一则结束循环
- 判断有效边数量若等于节点数减一,则能连接所有节点输出值,否则不能
#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
int fa[]; struct stu
{
int from,to;
double al;
}st[]; bool cmp(stu a,stu b)
{
return a.al < b.al;
} int find(int a) //搜索父节点函数
{
int r=a;
while(r != fa[r])
{
r=fa[r];
}
return r;
} int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int num,c,a[],b[],i,j;
num=-;
scanf("%d",&c); for(i = ; i<= c ; i++)
{
fa[i]=i;
} for(i = ; i <= c ;i++)
{
scanf("%d %d",&a[i],&b[i]); //数组a[]和数组b[]分别存放第i个岛的x,y坐标
} for(i = ; i < c ; i++)
{
for(j = i+ ; j <= c ; j++)
{
num++;
st[num].from=i; //结构体存放第i个岛和第j个岛于它们之间的距离
st[num].to=j;
st[num].al=sqrt((a[i]-a[j])*(a[i]-a[j])+(b[i]-b[j])*(b[i]-b[j]));
}
} sort(st,st+num+,cmp); //对岛之间的距离从小到大排序
int k=;
double sum=; for(i = ; i <= num ; i++)
{
if(k == c-) //连接c个岛只须c-1个边
{
break;
} if(find(st[i].from) != find(st[i].to) && st[i].al >= && st[i].al <= )
{
fa[find(st[i].from)]=find(st[i].to);
sum+=st[i].al;
k++;
}
} if(k == c-) //若找不到c-1条边则不能将岛都连起来
printf("%.1lf\n",sum*);
else
printf("oh!\n");
}
}
NYOJ 1875 畅通工程再续 (无节点间距离求最小生成树)的更多相关文章
- HDU 1875 畅通工程再续 (prim最小生成树)
B - 畅通工程再续 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit S ...
- HDU 1875 畅通工程再续 (最小生成树)
畅通工程再续 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Subm ...
- HDU 1875 畅通工程再续 (最小生成树)
畅通工程再续 题目链接: http://acm.hust.edu.cn/vjudge/contest/124434#problem/M Description 相信大家都听说一个"百岛湖&q ...
- hdu 1875 畅通工程再续(prim方法求得最小生成树)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1875 /************************************************* ...
- HDU 1875 畅通工程再续(kruskal)
畅通工程再续 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Sub ...
- HDU 1875 畅通工程再续 (Prim)
题目链接:HDU 1875 Problem Description 相信大家都听说一个"百岛湖"的地方吧,百岛湖的居民生活在不同的小岛中,当他们想去其他的小岛时都要通过划小船来实现 ...
- HDU - 1875 畅通工程再续
Problem Description 相信大家都听说一个“百岛湖”的地方吧,百岛湖的居民生活在不同的小岛中,当他们想去其他的小岛时都要通过划小船来实现.现在政府决定大力发展百岛湖,发展首先要解决的问 ...
- Hdoj 1875.畅通工程再续 题解
Problem Description 相信大家都听说一个"百岛湖"的地方吧,百岛湖的居民生活在不同的小岛中,当他们想去其他的小岛时都要通过划小船来实现.现在政府决定大力发展百岛湖 ...
- HDU - 1875 畅通工程再续【最小生成树】
Problem Description 相信大家都听说一个"百岛湖"的地方吧,百岛湖的居民生活在不同的小岛中,当他们想去其他的小岛时都要通过划小船来实现.现在政府决定大力发展百岛湖 ...
随机推荐
- oracle 生成随机数
产生一个介于指定范围之内的38位精度的随机数SQL> SELECT DBMS_RANDOM.VALUE(1, 9999) FROM dual; DBMS_RANDOM.VALUE(1,9999) ...
- 清除select自带小三角
select {/*Chrome和Firefox里面的边框是不一样的,所以复写了一下*/border: solid 1px #000; /*很关键:将默认的select选择框样式清除*/appeara ...
- PyQt5编程入门
1 25行的弹出式闹钟 import sys import time from PyQt5 import QtCore from PyQt5.QtWidgets import QLabel from ...
- nginx用户统计
1 概念 PV:页面访问量,即PageView,用户每次对网站的访问均被记录,用户对同一页面的多次访问,访问量累计. UV:独立访问用户数:即UniqueVisitor,访问网站的一台电脑客户端为一个 ...
- Python转载
让Python的经验更多一点 Python while 1 和 while True 速度比较 Python %s和%r的区别
- [转]Android 如何监听返回键,弹出一个退出对话框
本文转自:http://blog.csdn.net/sunnyfans/article/details/8094349 Android 如何监听返回键点击事件,并创建一个退出对话框, 防止自己写的应用 ...
- 学习ASP.NET MVC5的一个轻量级的NinJect框架学习的第二天
新建一个Abstract文件夹 放置一些抽象的类,如接口 我们通过该接口就可以得到对应类的相关信息, 不需要去管该数据如何存储,以及存储的位置,这就是存储库模式的本质 public i ...
- subprocess模块详解2
1.call() 和run功能类似,都是接受一个列表里的参数. >>> import subprocess >>> a = subprocess.call([&qu ...
- Es6学习笔记(7)----数组的扩展
参考书<ECMAScript 6入门>http://es6.ruanyifeng.com/ 数组的扩展 1.扩展运算符:可以将数组转化成逗号隔离的单个参数...[1,2,3] //控制台运 ...
- Vue踩坑第一步,安装Vue最新版本
学习vue第一步肯定是安装vue-cli,那么肯定想去搜下如何安装vue-cli呢? 网上搜到的结果大都是: npm i vue-cli -g 输入vue -V发现: 输入node -v发现: 自己明 ...