描述

The Department of National Defence (DND) wishes to connect several northern outposts by a wireless network. Two different communication technologies are to be used in establishing the network: every outpost will have a radio transceiver and some outposts will in addition have a satellite channel.
Any two outposts with a satellite channel can
communicate via the satellite, regardless of their location. Otherwise,
two outposts can communicate by radio only if the distance between them
does not exceed D, which depends of the power of the transceivers.
Higher power yields higher D but costs more. Due to purchasing and
maintenance considerations, the transceivers at the outposts must be
identical; that is, the value of D is the same for every pair of
outposts.

Your job is to determine the minimum D required for
the transceivers. There must be at least one communication path (direct
or indirect) between every pair of outposts.

输入

The
first line of input contains N, the number of test cases. The first
line of each test case contains 1 <= S <= 100, the number of
satellite channels, and S < P <= 500, the number of outposts. P
lines follow, giving the (x,y) coordinates of each outpost in km
(coordinates are integers between 0 and 10,000).

输出

For
each case, output should consist of a single line giving the minimum D
required to connect the network. Output should be specified to 2 decimal
points.

样例输入

1
2 4
0 100
0 300
0 600
150 750

样例输出

212.13

题意

二维平面给你p个点的图,问你形成最多s个连通块使所有边的最大值最小,并输出

题解

很容易想到最小生成树,每连一条边就少一个连通块,当我们最后形成s个连通块时找出所有边的最大值就是最小值

Kruskal算法恰好是按边大小排序,所以答案就是要我们从大到小输出第cnt-s+1条边

代码

 #include<stdio.h>
#include<math.h>
#include<algorithm>
using namespace std; int s,p,F[];
struct edge
{
int u,v;
double w;
}edges[];
bool cmp(edge a,edge b)
{
return a.w<b.w;
}
int Find(int x)
{
return F[x]==x?x:F[x]=Find(F[x]);
}
int tot=;
void Kruskal()
{
for(int i=;i<=p;i++)F[i]=i;
sort(edges,edges+tot,cmp);
int cnt=;
double D[];
for(int i=;i<tot;i++)
{
int fu=Find(edges[i].u);
int fv=Find(edges[i].v);
double fw=edges[i].w;
if(fu!=fv)
{
cnt++;
F[fu]=fv;
D[cnt]=fw;
if(cnt==p-)break;
}
}
if(s>=p)printf("0.00\n");
else printf("%.2f\n",D[cnt-s+]);
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
tot=;
int x[],y[];
scanf("%d%d",&s,&p);
for(int i=;i<=p;i++)
{
scanf("%d%d",&x[i],&y[i]);
for(int j=;j<=i;j++)
{
double dis=sqrt((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]));
edges[tot].u=i;
edges[tot].v=j;
edges[tot++].w=dis;
}
} Kruskal();
}
return ;
}

TZOJ 2415 Arctic Network(最小生成树第k小边)的更多相关文章

  1. [poj2349]Arctic Network(最小生成树+贪心)

    Arctic Network Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 17758   Accepted: 5646 D ...

  2. POJ 2349 Arctic Network (最小生成树)

    Arctic Network Time Limit:2000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Subm ...

  3. poj 2349 Arctic Network(最小生成树的第k大边证明)

    题目链接: http://poj.org/problem?id=2349 题目大意: 有n个警戒部队,现在要把这n个警戒部队编入一个通信网络, 有两种方式链接警戒部队:1,用卫星信道可以链接无穷远的部 ...

  4. POJ 2349 Arctic Network(最小生成树+求第k大边)

    题目链接:http://poj.org/problem?id=2349 题目大意:有n个前哨,和s个卫星通讯装置,任何两个装了卫星通讯装置的前哨都可以通过卫星进行通信,而不管他们的位置. 否则,只有两 ...

  5. poj 2349 Arctic Network 最小生成树,求第k大条边

    题目抽象出来就是有一些告诉坐标的通信站,还有一些卫星,这些站点需要互相通信,其中拥有卫星的任意两个站可以不用发射器沟通,而所有站点的发射器要都相同,但发射距离越大成本越高. 输入的数据意思: 实例个数 ...

  6. poj2349 Arctic Network - 最小生成树

    2017-08-04 16:19:13 writer:pprp 题意如下: Description The Department of National Defence (DND) wishes to ...

  7. POJ 2349 Arctic Network (最小生成树)

    Arctic Network 题目链接: http://acm.hust.edu.cn/vjudge/contest/124434#problem/F Description The Departme ...

  8. [Poj2349]Arctic Network(二分,最小生成树)

    [Poj2349]Arctic Network Description 国防部(DND)要用无线网络连接北部几个哨所.两种不同的通信技术被用于建立网络:每一个哨所有一个无线电收发器,一些哨所将有一个卫 ...

  9. POJ2349:Arctic Network(二分+最小生成树)

    Arctic Network Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 28311   Accepted: 8570 题 ...

随机推荐

  1. elasticsearch-cluster shards

    elasticsearch-cluster: Windows下本地测试用 创建集群就要给集群起名,修改 elasticsearch.yml文件. cluster.name: es_test //集群名 ...

  2. APP-9-文字识别-车牌识别

    1.获取Access Token APP-9.1-百度应用-文字识别 2.代码部分 <!DOCTYPE html> <html> <head> <meta c ...

  3. Seaweed-FS综合使用测试(转)

    2016-03-16 12:17:48   Seaweed-FS综合使用测试 参考信息 https://github.com/chrislusf/seaweedfs/ https://bintray. ...

  4. Weed-FS 接口 master、volume 服务接口(转)

    目录结构   weed-fs master 服务接口,分配文件 id,查找 volume,volume 服务接口,在指定的 volume 服务创建指定的 volume,检查 volume 服务的状态. ...

  5. 尚硅谷springboot学习14-自动配置原理

    配置文件能配置哪些属性 配置文件能配置的属性参照 自动配置的原理 1).SpringBoot启动的时候加载主配置类,开启了自动配置功能 @EnableAutoConfiguration 2).@Ena ...

  6. C语言复习:结构体

    结构体专题 01.结构体类型定义及结构体变量定义     char c1,char c2, char name[62]; int age     char name[62]; int age,char ...

  7. Dictionary,hashtable, stl:map有什么异同?

    相同点:字典和map都是泛型,而hashtable不是泛型. 不同点:三者算法都不相同 Hashtable,看名字能想到,它是采用传统的哈希算法:探测散列算法,而字典则采用的是散列拉链算法,效率较高, ...

  8. tomcat 简单安装配置说明

    1.下载安装文件[apache-tomcat-6.0.41.tar.gz]到指定目录[/usr/local]2.解压文件[tar -zxvf apache-tomcat-6.0.41.tar.gz], ...

  9. 16.2 profile 显示或者隐藏页面 修改密码

    我们auth在clent端有更加强大的功能 显示或者隐藏component 或者 我们可以阻止或者允许某个用户访问url

  10. effective C++学习一(仅供个人学习记录,本文摘录effective C++)

    条款 1:尽量用 const 和 inline 而不用#define   #define ASPECT_RATIO 1.653 编译器会永远也看不到 ASPECT_RATIO 这个符号名,因为在源码进 ...