题目https://www.luogu.org/problemnew/show/P1991

题意:有p个点的坐标,可以有s个点使得这s个点之间可以无限制通信。

要使所有点之间两两有通信的路径(可以是间接的),其中最长的一段通信路径是多长。

思路:最近都不好好看题。上一题没看清-1,这一题没看清精确到小数点两位,在干吗啊。

首先建图,然后找最小生成树里第p-s大的路径长度。

 #include<cstdio>
#include<cstdlib>
#include<map>
#include<set>
#include<cstring>
#include<algorithm>
#include<vector>
#include<cmath>
#include<stack>
#include<queue>
#include<iostream> #define inf 0x3f3f3f3f
using namespace std;
typedef long long LL;
typedef pair<int, int> pr; int s, n;
const int maxn = ;
struct node{
int x, y;
}nodes[maxn];
double g[maxn][maxn]; double dist(int i, int j)
{
return sqrt((nodes[i].x - nodes[j].x) * (nodes[i].x - nodes[j].x) + (nodes[i].y - nodes[j].y) * (nodes[i].y - nodes[j].y));
} bool vis[maxn];
double d[maxn];
vector<double>ans;
void prim(int x)
{
memset(d, 0x3f, sizeof(d));
d[x] = ;
vis[x] = true;
for(int i = ; i <= n; i++){
d[i] = g[x][i];
} for(int t = ; t < n; t++){
double min = inf;
int minid;
for(int i = ; i <= n; i++){
if(!vis[i] && d[i] < min){
min = d[i];
minid = i;
}
}
vis[minid] = true;
ans.push_back(min);
for(int i = ; i <= n; i++){
if(d[i] > g[minid][i]){
d[i] = g[minid][i];
}
}
}
} int main()
{
scanf("%d%d", &s, &n);
for(int i = ; i <= n; i++){
scanf("%d%d", &nodes[i].x, &nodes[i].y);
}
for(int i = ; i <= n; i++){
for(int j = i + ; j <= n; j++){
g[i][j] = g[j][i] = dist(i, j);
//printf("%lf\n", g[i][j]);
}
} prim();
sort(ans.begin(), ans.end());
printf("%.2lf\n", ans[n - s - ]);
return ;
}

洛谷P1991 无线通讯网【最小生成树】的更多相关文章

  1. 洛谷P1991 无线通讯网

    P1991 无线通讯网 170通过 539提交 题目提供者洛谷OnlineJudge 标签图论 难度普及+/提高 提交该题 讨论 题解 记录 最新讨论 怎么又炸了 为啥一直40!求解! UKE:inv ...

  2. 洛谷——P1991 无线通讯网

    P1991 无线通讯网 题目描述 国防部计划用无线网络连接若干个边防哨所.2 种不同的通讯技术用来搭建无线网络: 每个边防哨所都要配备无线电收发器:有一些哨所还可以增配卫星电话. 任意两个配备了一条卫 ...

  3. 洛谷 P1991 无线通讯网

    P1991 无线通讯网 题目描述 国防部计划用无线网络连接若干个边防哨所.2 种不同的通讯技术用来搭建无线网络: 每个边防哨所都要配备无线电收发器:有一些哨所还可以增配卫星电话. 任意两个配备了一条卫 ...

  4. 洛谷 P1991 无线通讯网 题解

    P1991 无线通讯网 题目描述 国防部计划用无线网络连接若干个边防哨所.2 种不同的通讯技术用来搭建无线网络: 每个边防哨所都要配备无线电收发器:有一些哨所还可以增配卫星电话. 任意两个配备了一条卫 ...

  5. 洛谷 P1991 无线通讯网 Label:最小生成树 || 二分

    题目描述 国防部计划用无线网络连接若干个边防哨所.2 种不同的通讯技术用来搭建无线网络: 每个边防哨所都要配备无线电收发器:有一些哨所还可以增配卫星电话. 任意两个配备了一条卫星电话线路的哨所(两边都 ...

  6. 洛谷P1991 无线通讯网(最小生成树性质+连通块)

    题目描述 国防部计划用无线网络连接若干个边防哨所.2 种不同的通讯技术用来搭建无线网络: 每个边防哨所都要配备无线电收发器:有一些哨所还可以增配卫星电话. 任意两个配备了一条卫星电话线路的哨所(两边都 ...

  7. 洛谷P1991无线通讯网[kruskal | 二分答案 并查集]

    题目描述 国防部计划用无线网络连接若干个边防哨所.2 种不同的通讯技术用来搭建无线网络: 每个边防哨所都要配备无线电收发器:有一些哨所还可以增配卫星电话. 任意两个配备了一条卫星电话线路的哨所(两边都 ...

  8. P1991 无线通讯网 最小生成树

    题目描述 国防部计划用无线网络连接若干个边防哨所.2 种不同的通讯技术用来搭建无线网络: 每个边防哨所都要配备无线电收发器:有一些哨所还可以增配卫星电话. 任意两个配备了一条卫星电话线路的哨所(两边都 ...

  9. Luogu P1991 无线通讯网

    P1991 无线通讯网 题目描述 国防部计划用无线网络连接若干个边防哨所.2 种不同的通讯技术用来搭建无线网络: 每个边防哨所都要配备无线电收发器:有一些哨所还可以增配卫星电话. 任意两个配备了一条卫 ...

随机推荐

  1. mac install azure-cli

    安装 CLI 时,可以先更新 brew 存储库信息,然后运行 install 命令: brew update && brew install azure-cli 更新: brew up ...

  2. Arm 环境上面libgdiplus的简单安装配置

    1. 下载libgdiplus的包 wget http://download.mono-project.com/sources/libgdiplus/libgdiplus0-6.0.4.tar.gz ...

  3. TZOJ5703: C++实验:学生成绩类的实现

    #include<iostream> #include<string> #include<stdio.h> using namespace std; class s ...

  4. redis列表数据类型---list

    一.概述 redis列表是简单的字符串列表,按照插入顺序排序 可以添加一个元素到列表的头部(左边)或者尾部(右边) 一个列表最多可以包含2^32-1个元素(每个列表超过40亿个元素). 二.redis ...

  5. csredis

    源码地址:https://github.com/2881099/csredis 1.增加了 CSRedisClient 现实集群与连接池管理,和 RedisHelper 静态类快速上手 //普通模式 ...

  6. VBA While Wend循环

    在While...Wend循环中,如果条件为True,则会执行所有语句,直到遇到Wend关键字. 如果条件为false,则退出循环,然后控件跳转到Wend关键字后面的下一个语句. 语法 以下是VBA中 ...

  7. vue的data里面的值是数组时,在更改其某一项的时候,怎么触发视图的重新渲染?

    1. 设置对象或数组的值:Vue.set(target,key,value) :2.删除对象或数组中元素: Vue.delete ( target,key) ;3. 数组对象直接修改属性,可以触发视图 ...

  8. Python中with用法详解

    一 .with语句的原理 上下文管理协议(Context Management Protocol):包含方法 __enter__()和__exit__(),支持该协议的对象要实现这两个方法. 上下文管 ...

  9. Pandas-数据处理-基础部分

    有趣的事,Python永远不会缺席! 如需转发,请注明出处:小婷儿的python https://www.cnblogs.com/xxtalhr/p/11014882.html  jupyter 代码 ...

  10. __init__、__new__方法详解

    __init__详解 class Dog(object): def __init__(self): print('init方法') def __del__(self): print('del方法') ...