poj2349最小生成树prim算法

摘要:
标题:有s个卫星频道,但有p(p>s)个位置。如果任何两个地方都有卫星频道,距离被忽略,剩下的地方只能通过无线电与其他地方连接。该距离是必需的,并且该距离仅与最大距离相关。询问最大距离的最小值分析:事实上,它是在最小生成树中找到p-最大数。您可以首先通过prim算法生成最小生成树,然后,通过快速排序生成树中的边,我们可以使用namespacestd#defineX1100#defineINF10005intx[X],y[X]获得最大的#include<iostream>#include#include#include#include;双dis[X][X],dp[X],q[X];布尔色[X];Intcmp{//排序内部比较函数returna<b;}Intmain(){freopen;freopen;intt,s,p;doublea,b;cin˃˃t;while(t--){cin˃˃s˃˃p;forscanf;//计算距离,因为任何两个不同的地方都可以连接{a=x[i]-x[j];b=y[i]-y[j],dis[i][j]=dis[j][i]=sqrt;}//////////以下是原始算法模板memset;内存集;fordp[i]=dis[0][i];use[0]=真;双MIN;intk,cnt=0;对于{MIN=INF;forif(!use[j])dp[j]=MIN;}排序;//排序边长度printf;}return0;}

题目:
有s个satellite channels,但有p(p>s)个地方,若任意两个地方有
satellite channels,则无视该距离,并且剩余的地方只能与其他地方
通过无线电连接,需要距离,且需要的距离只与最大距离有关,问该最大
距离的最小值(大概是这样啦)
分析:
实际上就是求最小生成树中的第p-s大的数,可以先通过prim算法生成
最小生成树,然后通过对生成树中的边进行快速排序,得到第p-s大的数


#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <cmath>
using namespace std;
#define X 1100
#define INF 10005
int x[X],y[X];
double dis[X][X],dp[X],q[X];
bool use[X];
int cmp(double a,double b)
{ //sort内部比较函数
return a<b;
}
int main()
{
freopen("sum.in","r",stdin);
freopen("sum.out","w",stdout);
int t,s,p;
double a,b;
cin>>t;
while(t--)
{
cin>>s>>p;
for(int i=0;i<p;i++)
scanf("%d%d",&x[i],&y[i]);
//求距离,因为任意不同两个地方均可连接
for(int i=0;i<p-1;i++)
for(int j=0;j<p;j++)
{
a = x[i]-x[j];
b = y[i]-y[j];
dis[i][j] = dis[j][i] = sqrt(a*a+b*b);
}
////////////////以下是prim算法模板
memset(use,false,sizeof(use));
memset(dp,INF,sizeof(dp));
for(int i=0;i<p;i++)
dp[i] = dis[0][i];
use[0] = true;
double MIN;
int k,cnt = 0;
for(int i=0;i<p-1;i++)
{
MIN = INF;
for(int j=1;j<p;j++)
if(!use[j]&&MIN>dp[j])
{
MIN = dp[j];
k = j;
}
q[cnt++]=MIN;//通过数组q[]储存最小生成树中的边长
use[k] = true;
for(int j=1;j<p;j++)
if(!use[j])
dp[j]=min(dp[j],dis[k][j]);
}
sort(q,q+cnt,cmp);//对边长进行排序
printf("%.2lf\n",q[p-s-1]);
}
return 0;
}

免责声明:文章转载自《poj2349最小生成树prim算法》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇使用Glide设置view背景常见的加密方式总结下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

从BF算法到kmp算法详解

正文索引 一、KMP介绍 二、例子:子串匹配母串 1.BF算法的解决方法 三、kmp算法的实现 (1)为什么已经有BF算法了还要有KMP算法呢? (2)发明的算法基本思想 (3)具体实现 一、KMP介绍 KMP算法是一种改进的字符串匹配算法(有BF算法改进而来,BF算法是暴利搜索匹配的方式,而KMP则是对BF算法的回溯过程进行改进,从而大幅度降低了时间复...

购物篮模型&amp;amp;Apriori算法

一、频繁项集 若I是一个项集,I的支持度指包含I的购物篮数目,若I的支持度>=S,则称I是频繁项集。其中,S是支持度阈值。 1、应用 “尿布和啤酒” 关联概念:寻找多篇文章中共同的词汇集合。项->词,购物篮->文档 文档抄袭:寻找多个购物篮中共同出现的项对,同一个项对出现在越多的购物篮中,其相似度越高。项->文档,购物篮-&g...

MD5加密和RSA加密

1.MD5加密    MD5(单向散列算法)的全称是Message-Digest Algorithm 5(信息-摘要算法),MD5算法的使用不需要支付任何版权费用。      MD5的功能:       ①.输入任意长度的信息,经过处理,输出为128位的信息(数字指纹);      ②.不同的输入得到的不同的结果(唯一性);      ③.根据128位的输...

《Qt数据类型》--QByteArray,QString,int,hex之间的转化

对于QString和QByteArray,他们都有一个toInt的静态函数,QString::toInt()是根据string的字面值转化为int类型,比如string:"123",转化为int类型就变为int:123。而对于QByteArray::toInt()是将16进制的数据转化为10进制之后得到int类型,比如byte:0xf8-->dec:...

异常检测 | 使用孤立森林 sklearn.ensemble.IsolationForest 分析异常流量

孤立森林 Isolation Forest(sklearn.ensemble.IsolationForest):一种适用于连续数据的无监督异常检测方法。与随机森林类似,都是高效的集成算法,相较于LOF,K-means等传统算法,该算法鲁棒性高且对数据集的分布无假设。 Isolation Forest算法做非监督式的异常点检测分析,对数据特征的要求宽松:...

Python列表操作与深浅拷贝(5)——数字处理函数、类型判断、列表链表队列栈

python内建数据结构 分类 数值型:  int  float  complex  bool 序列对象: 字符串str  列表list  元组tuple 键值对:  集合set  字典dict 数值型 (list float complex bool都是class) int:python3 中 int 就是长整型,没有大小限制 float:支持十进制和科...