最小生成树--nkoj1756极地网络

【Week8】极地网络

Description

国防部想要通过无线网络与北极地区的一些军事哨所建立通讯连接。有两种不同的通讯技术将要被用来建立这个网络系统:无线电和卫星电话。每个哨所都将配置无线电收发器。只有部分哨所将配置卫星电话。 
任意两个配置了卫星电话的哨所可以通过卫星来通信,卫星通信不受地域和距离的限制。但是任意两个哨所想要通过无线电来通信的话,就有距离限制了,两者的距离不能超过D公里,这个距离D由无线电收发器的功率决定。无线电设备的功率越大,通信距离越远,但是价格也越高。处于价格和保养的考虑,国防部决定所有的哨所都使用相同的无线电收发器,也就是说每个哨所的无线电收发器的最大通信距离D都是相同的。 
你的工作就是决定无线电设备的传输距离D最小应该是多少,才能保证任意两个哨所间都有直接或间接的通信线路可以通信。

Input

第一行两个整数S(1 <= S <= 100)和P(S < P <= 500),S表示可供使用的卫星电话的数量,P表示哨所的数量。 
接下来P行,每行两个整数X和Y,表示一个哨所的位置坐标,单位是公里。(0<=X,Y<=10000)

Output

一个包含两个小数位的实数,表示无线电设备的最小通信距离。

Sample Input

2 4
0 100
0 300
0 600
150 750

Sample Output

212.13

Hint

将2个卫星电话分配给第2和第3哨所 
第2、3哨所直接用卫星电话通信 
第1、3哨所的距离为200 
第3、4哨所的距离为212.13

方法:n个点,s个电话,s个电话可以把s个点缩成1个点,还剩n-s+1个点,需要n-s条边

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
struct node{
	int x,y;
};
struct line{
	int a,b;
	double len;
};
double dis(int a,int b,int c,int d){
	return sqrt((a-c)*(a-c)+(b-d)*(b-d));
}
bool cmp(line a,line b){
	return a.len<b.len;
}
node a[1005];
line edge[250005];
int n,s,tot=0;
double ans=0;
int father[1005];
int getfather(int x){
	if(x!=father[x])father[x]=getfather(father[x]);return father[x];
}
void kruskal(){
	int a,b,k,cnt;
	k=0;cnt=0;
	while(cnt<n-s){
		k++;
		a=getfather(edge[k].a);
		b=getfather(edge[k].b);
		if(a!=b){
			father[a]=b;
			ans=max(ans,edge[k].len);
			cnt++;
		}
	}
}
int main(){
	int i,j,k;
	line temp;
	cin>>s>>n;
	for(i=1;i<=n;i++){
		scanf("%d%d",&a[i].x,&a[i].y);
	}
	for(i=1;i<=n;i++)father[i]=i;
	for(i=1;i<=n;i++){
		for(j=i+1;j<=n;j++){
			temp.a=i;
			temp.b=j;
			temp.len=dis(a[i].x,a[i].y,a[j].x,a[j].y);
			edge[++tot]=temp;
		}
	}
	sort(edge+1,edge+1+tot,cmp);
	kruskal();
	printf("%.2lf",ans);
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值