poj 2349 求MST中第S大的权值
题目大意:
有一些炮台,如果这个炮台有卫星接收器,那么任意两个有卫星接收器的炮台可以通信,不受距离限制;否者,两个炮台之间只能通过对讲机通信,这是受距离限制的。要买一种对讲机,用在需要的炮台上,要求所有炮台两两之间可以直接或者间接通信,问要买通信距离D至少为多少的对讲机可以满足要求。
有S个卫星接收器,那么就可以减少S-1个距离开销。要让D尽可能小,就让这S-1个距离开销最大,所以,想法就是,求这些点的最小生成树,然后把所选的边排序,第S大的边的权值就是所求。
假如有4个点,2个卫星,那么最长的那条边可以用卫星 ,第2长的边就是最小的D,
Sample Input
1 //T
2 4 //卫星数量 结点数量
0 100
0 300
0 600
150 750
Sample Output
212.13
1 # include <iostream> 2 # include <cstdio> 3 # include <cstring> 4 # include <algorithm> 5 # include <cmath> 6 # define LL long long 7 using namespace std ; 8 9 const int INF=0x3f3f3f3f; 10 const int MAXN=510; 11 bool vis[MAXN]; 12 double lowc[MAXN]; 13 int n ; 14 int l ; 15 double cost[MAXN][MAXN] ; 16 double edge[MAXN] ; 17 18 struct poin 19 { 20 int x ; 21 int y ; 22 }p[MAXN]; 23 24 bool cmp(double x , double y) 25 { 26 return x > y ; 27 } 28 29 void Prim()//点是0~n-1 30 { 31 l = 0 ; 32 memset(vis,false,sizeof(vis)); 33 memset(edge,0,sizeof(edge)); 34 vis[0]=true; 35 for(int i=1;i<n;i++)lowc[i]=cost[0][i]; 36 for(int i=1;i<n;i++) 37 { 38 double minc=INF; 39 int p=-1; 40 for(int j=0;j<n;j++) 41 if(!vis[j]&&minc>lowc[j]) 42 { 43 minc=lowc[j]; 44 p=j; 45 } 46 if(minc==INF)return ;//原图不连通 47 48 edge[l] = minc ; 49 l++ ; 50 vis[p]=true; 51 for(int j=0;j<n;j++) 52 if(!vis[j]&&lowc[j]>cost[p][j]) 53 lowc[j]=cost[p][j]; 54 } 55 return ; 56 } 57 58 int main() 59 { 60 61 // freopen("in.txt","r",stdin) ; 62 int T ; 63 scanf("%d" , &T) ; 64 while(T--) 65 { 66 int s ; 67 scanf("%d %d" ,&s , &n) ; 68 int i , j ; 69 for (i = 0 ; i < n ; i++) 70 for (j = 0 ; j < n ; j++) 71 cost[i][j] = INF ; 72 for (i = 0 ; i < n ; i++) 73 scanf("%d %d" , &p[i].x , &p[i].y) ; 74 for (i = 0 ; i < n ; i++) 75 for (j = i+1 ; j < n ; j++) 76 { 77 double t = sqrt((double)(p[i].x - p[j].x) * (p[i].x - p[j].x) + (p[i].y - p[j].y) * (p[i].y - p[j].y)) ; 78 cost[i][j] = t ; 79 cost[j][i] = t ; 80 } 81 Prim() ; 82 sort(edge,edge+l,cmp) ; 83 printf("%.2lf\n" , edge[s-1]) ; 84 85 86 } 87 return 0 ; 88 }
View Code
转载于:https://www.cnblogs.com/mengchunchen/p/4578751.html
poj 2349 求MST中第S大的权值相关推荐
- 浅析伪罗伯特法所构造的任意阶数伪二次幻方中某一任意位置权值的一般求法
二次幻方(Magic Square)是一种每行.列和对角线上的数字和都相等的二维数组.构造二次幻方的方法有很多种,其中最著名的是罗伯特法,又称楼梯法,其核心是在奇数阶二次幻方的首行正中列填上1,随后下 ...
- 怎么修改数组中指定元素_求数组中第K大的元素
问题描述 求无序数组int[] nums中第K大的元素. 例如 输入:nums[] = {9,5,8},k = 2 输出:8 输入:nums[] = {3,1,2,4,5,5,6},k = 4 输出: ...
- 求序列中第k大的元素(划分树模板)
http://acm.hdu.edu.cn/showproblem.php?pid=4251 n个数,求给定区间中间大小的元素的值 Sample Input 5 5 3 2 4 1 3 1 3 2 4 ...
- CNN中的卷积操作与权值共享
CNN中非常有特点的地方就在于它的局部连接和权值共享,通过卷积操作实现局部连接,这个局部区域的大小就是滤波器filter,避免了全连接中参数过多造成无法计算的情况,再通过参数共享来缩减实际参数的数量, ...
- 求数组中顺序子集和最大的值(详细图解)
1.题目: 给定一组数,求其中任何一组顺序子集和最大的值. 例如下面一组数据: 1 , 2 , -4 , 7 , 8 , -2 , 4: 和最大的一组子集应该是: 7 , 8 , -2 , 4 (总和 ...
- python限制输入值范围_求python 中if 里如何设定一个值的范围
展开全部 number = raw_input (">"). 变量名没办法返回,因为变量名程序不知道,也没有意义.如果你62616964757a686964616fe5868 ...
- 线性时间复杂度求数组中第K大数
求数组中第K大的数可以基于快排序思想,步骤如下: 1.随机选择一个支点 2.将比支点大的数,放到数组左边:将比支点小的数放到数组右边:将支点放到中间(属于左部分) 3.设左部分的长度为L, 当K &l ...
- 【无码专区1】简单路径的第二大边权(启发式合并+最小生成树)
只有std,没有自我实现,所以叫做无码专区 description 给一张无向图,多次询问,每次询问两个点之间所有简单路径(不重复经过点)中边权第二大(不是严格第二大)的权值的最小值. 数据范围:10 ...
- java二叉树求权值_百度笔试题目:二叉树路径权值和【转】
数据结构课程 百度笔试题目: 给出一个二叉树,和一个整型值,求出二叉树上所有从根到叶子的路径,并且此路径上各个节点的权值之和等于给出的整型值. 解题思路: 根据二叉树的先根遍历思想,通过一个栈保存从根 ...
最新文章
- python中的open函数实例_Python中open函数注意点
- 5分钟学习基于Go,go-microservice-template,Minke的微服务
- protocol buffer没那么难,不信你看这篇
- (OS X) OpenCV架构x86_64的未定义符号:错误(OpenCV Undefined symbols for architecture x86_64: error)...
- Euler:欧拉函数&素数筛
- Hystrix能解决的问题
- 安全和anti-sapm的HTML5效果如何
- 学计算机辅修什么专业好,女生计算机辅修什么专业好
- Go 语言学习总结(1)—— Go 入门简介
- python scipy.stats 正态分布_Python Scipy stats.normaltest()用法及代码示例
- 浙江利捷分析报告(0607)
- Chrome浏览器启动参数大全(命令行参数)
- 各自然带代表植被_十种常见自然带所对应的植被
- 手机ram内存测试软件,RAMTester(内存检测工具)
- ClickHouse磁盘清理
- m4s格式转换mp3_mp3文件怎么转换格式
- git报错 fatal: unsafe repository 解决方法 xxx is owned by someone else
- 力扣刷题 DAY_63 回溯
- 倒数15日开幕!第八届全球云计算大会解锁主论坛重磅嘉宾
- 高通SDX12:基于sgm4151x的充电IC代码架构