洛谷 1991 无线通讯网 最小生成树 解题报告

来源:互联网 发布:html5 css3 js 教程 编辑:程序博客网 时间:2024/05/20 19:18

题目描述

国防部计划用无线网络连接若干个边防哨所。2 种不同的通讯技术用来搭建无线网络;

每个边防哨所都要配备无线电收发器;有一些哨所还可以增配卫星电话。

任意两个配备了一条卫星电话线路的哨所(两边都ᤕ有卫星电话)均可以通话,无论

他们相距多远。而只通过无线电收发器通话的哨所之间的距离不能超过 D,这是受收发器

的功率限制。收发器的功率越高,通话距离 D 会更远,但同时价格也会更贵。

收发器需要统一购买和安装,所以全部哨所只能选择安装一种型号的收发器。换句话

说,每一对哨所之间的通话距离都是同一个 D。你的任务是确定收发器必须的最小通话距

离 D,使得每一对哨所之间至少有一条通话路径(直接的或者间接的)。

输入输出格式

输入格式:

从 wireless.in 中输入数据第 1 行,2 个整数 S 和 P,S 表示可安装的卫星电话的哨所

数,P 表示边防哨所的数量。接下里 P 行,每行两个整数 x,y 描述一个哨所的平面坐标

(x, y),以 km 为单位。

输出格式:

输出 wireless.out 中

第 1 行,1 个实数 D,表示无线电收发器的最小传输距离,㋮确到小数点后两位。

输入输出样例

输入样例#1:

2 4
0 100
0 300
0 600
150 750

输出样例#1:

212.13

说明

附送样例一个

对于 20% 的数据:P = 2,S = 1

对于另外 20% 的数据:P = 4,S = 2

对于 100% 的数据保证:1 ≤ S ≤ 100,S < P ≤ 500,0 ≤ x,y ≤ 10000。

思路

最小生成树很裸,预处理一下两点的距离。

代码

#include<cstdio>#include<cstring>#include<algorithm>#include<iostream>#include<cmath>#include<vector>using namespace std;const int N=500+5;int s,n,head[N],num=0,father[N],cnt=0,tot=0;double maxn=0;;inline int read(){    int x=0,f=1;char ch=getchar();    while(ch<'0'&&ch>'9') {if (ch=='-') f=-1;ch=getchar();}    while(ch>='0'&&ch<='9') {x=x*10+ch-'0';ch=getchar();}    return x*f;}struct edge{int u,v;double w;}ed[N*N];struct data{int x,y;}point[N];int getfather(int x){if (x==father[x]) return x;return father[x]=getfather(father[x]);}bool cmp(edge a,edge b){return a.w<b.w;}void build(int u,int v,double w){    ed[++num].u=u;    ed[num].v=v;    ed[num].w=w;    head[u]=num;}int main(){    s=read();n=read();    for (int i=1;i<=n;i++)    {point[i].x=read();point[i].y=read();}    for (int i=1;i<=n;i++)    for (int j=i+1;j<=n;j++)    {        int x=abs(point[i].x-point[j].x),y=abs(point[i].y-point[j].y);        build(i,j,sqrt(x*x+y*y));//      printf("%d %d :%lf\n",i,j,sqrt(x*x+y*y));        tot++;    }    for (int i=1;i<=n;i++)    father[i]=i;    sort(ed+1,ed+tot+1,cmp);    for (int i=1;i<=n*n;i++)    {        double w=ed[i].w;int u=ed[i].u,v=ed[i].v;        int x=getfather(u),y=getfather(v);        if (x!=y) {father[x]=y;cnt++;maxn=max(maxn,w);}        if (cnt==n-s) break;    }    printf("%.2lf\n",maxn);    return 0;}
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 我想离婚他不离怎么办 我又胖又丑怎么办 吃避孕药变胖了怎么办 熬夜久了眼睛疼怎么办 熬夜眼睛疼肿了怎么办 胡须长的太快怎么办 乳房有小结结该怎么办 我一点胸都没有怎么办 狗狗不愿意睡窝怎么办 狗狗喜欢睡地板怎么办 小金毛不吃狗粮怎么办 孕前没有吃叶酸怎么办 严重少精和畸形怎么办 大学混了四年怎么办 和家人相处很累怎么办 40多岁眼睛花怎么办 侧方停车右边宽怎么办 有公主病的老婆怎么办? 圆通快递太慢了怎么办 美台军舰互停怎么办 安装包删除不掉怎么办 艾灸后皮肤极痒怎么办 拔罐如果有水泡怎么办 拔罐拔出水泡来怎么办 拔罐拔出了水泡怎么办 风湿引起的背疼怎么办 拔罐减肥不瘦怎么办 艾灸后脸上长痘怎么办 艾灸烟大怎么办 湿毛巾 月经推迟一个月了还不来怎么办 埋线了喝酒了怎么办 对待孩子脾气暴燥怎么办 买的新鞋子臭脚怎么办 鞋子臭脚怎么办如何除 惠普803墨盒干了怎么办 酷派手机无命令怎么办 华为手机锁机了怎么办 小孩被蜘蛛咬了怎么办 我是一个不爱说话的人怎么办 光动能手表停了怎么办 电波表收不到波怎么办