ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

极地网络

2021-03-11 19:34:08  阅读:178  来源: 互联网

标签:无线电 int fath 网络 tot 极地 edge 哨所


问题描述
国防部想要通过无线网络与北极地区的一些军事哨所建立通讯连接。有两种不同的通讯技术将要被用来建立这个网络系统:无线电和卫星电话。每个哨所都将配置无线电收发器。只有部分哨所将配置卫星电话。
任意两个配置了卫星电话的哨所可以通过卫星来通信,卫星通信不受地域和距离的限制。但是任意两个哨所想要通过无线电来通信的话,就有距离限制了,两者的距离不能超过D公里,这个距离D由无线电收发器的功率决定。无线电设备的功率越大,通信距离越远,但是价格也越高。处于价格和保养的考虑,国防部决定所有的哨所都使用相同的无线电收发器,也就是说每个哨所的无线电收发器的最大通信距离D都是相同的。
你的工作就是决定无线电设备的传输距离D最小应该是多少,才能保证任意两个哨所间都有直接或间接的通信线路可以通信。
输入格式
第一行两个整数S(1 <= S <= 100)和P(S < P <= 500),S表示可供使用的卫星电话的数量,P表示哨所的数量。
接下来P行,每行两个整数X和Y,表示一个哨所的位置坐标,单位是公里。(0<=X,Y<=10000)
输出格式
一个包含两个小数位的实数,表示无线电设备的最小通信距离。

样例输入 1
2 4
0 100
0 300
0 600
150 750

样例输出 1
212.13

样例输入 2
1 2
0 0
100 100

样例输出 2
141.42

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

思路
这道题其实就是最小生成树的模板,注意实际上只需要连接p-s条边

代码

#include <bits/stdc++.h>
using namespace std;
int fath[505];//父亲变量
int x[505];
int y[505];
int s ,p;
struct node{
	int a, b, len;
};
bool cmp(node a, node b){
	return a.len < b.len;
}
node edge[250000 + 5];
int getfaq(int a){
	if(a != fath[a]){
		fath[a] = getfaq(fath[a]);
	}
	return fath[a];
}//找爹函数
int main(){
	int k = 0, cnt = 0;
	scanf("%d %d", &s, &p);
	for(int i = 1; i <= p; i++){
		scanf("%d %d", &x[i], &y[i]);
	}
	int tot = 0;
	for(int i = 1; i <= p; i++){
		for(int j = i + 1; j <= p; j++){
			tot++; 
			int dx = x[i] - x[j];
			int dy = y[i] - y[j];
			edge[tot].len = dx * dx + dy * dy;
			edge[tot].a = i;
			edge[tot].b = j;
		}
	}
	for(int i = 1; i <= p; i++){
		fath[i] = i;
	}
	sort(edge + 1, edge + 1 + tot, cmp);
	while(cnt<p-1){
		k++;
		int X = getfaq(edge[k].a);
		int Y = getfaq(edge[k].b);
		if(X != Y){
			cnt++;
			fath[X] = Y;
			if(p - cnt == s){
				printf("%.2lf", sqrt(edge[k].len));//注意题意要求只需要求最大
				return 0;
			}
		}
	}
    return 0;
}

标签:无线电,int,fath,网络,tot,极地,edge,哨所
来源: https://blog.csdn.net/thelittle_black/article/details/114677553

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有