【ACM】CCF-201403-4 无线网络 图论的应用

刷CCF中。。。

问题描述

  目前在一个很大的平面房间里有 n 个无线路由器,每个无线路由器都固定在某个点上。任何两个无线路由器只要距离不超过 r 就能互相建立网络连接。
  除此以外,另有 m 个可以摆放无线路由器的位置。你可以在这些位置中选择至多 k 个增设新的路由器。
  你的目标是使得第 1 个路由器和第 2 个路由器之间的网络连接经过尽量少的中转路由器。请问在最优方案下中转路由器的最少个数是多少?

输入格式

  第一行包含四个正整数 n,m,k,r。(2 ≤ n ≤ 100,1 ≤ k ≤ m ≤ 100, 1 ≤ r ≤ 108)。
  接下来 n 行,每行包含两个整数 xi 和 yi,表示一个已经放置好的无线 路由器在 (xi, yi) 点处。输入数据保证第 1 和第 2 个路由器在仅有这 n 个路由器的情况下已经可以互相连接(经过一系列的中转路由器)。
  接下来 m 行,每行包含两个整数 xi 和 yi,表示 (xi, yi) 点处可以增设 一个路由器。
  输入中所有的坐标的绝对值不超过 108,保证输入中的坐标各不相同。

输出格式

  输出只有一个数,即在指定的位置中增设 k 个路由器后,从第 1 个路 由器到第 2 个路由器最少经过的中转路由器的个数。

样例输入

  5 3 1 3
  0 0
  5 5
  0 3
  0 5
  3 5
  3 3
  4 4
  3 0

样例输出

  2

思路分析:这题如果能想到的话,对最短路径搜索的过程中添加不能走的限制条件(cnt[i][k]+cnt[k][j]<kk)即可。这里cnt是指i到j经过的可添加的点的个数,edge则是边,根据floyd算法进行小的改变即可。不过做这道题想起来还有点不容易(对我而言吧。。。)

#include <stdio.h>
#include <string.h>
#define LOCAL
typedef long long LL;
struct point {
    int x,y;
};
int n,m,kk,r;
int edge[205][205];//count from 1
point p[205];
int cnt[205][205];
void print() {
    printf("edge:\n");
    for(int i=1; i<=n+m; i++) {
        for(int j=1; j<=n+m; j++) {
            printf("%d ",edge[i][j]);
        }
        printf("\n");
    }
    printf("cnt:\n");
    for(int i=1; i<=n+m; i++) {
        for(int j=1; j<=n+m; j++) {
            printf("%d ",cnt[i][j]);
        }
        printf("\n");
    }
}
int main() {
#ifdef LOCAL
    freopen("data.in","r",stdin);
//    freopen("data.out","w+",stdout);
#endif
    while(scanf("%d%d%d%d",&n,&m,&kk,&r)!=EOF) {//编号大于n的是可添加路由器
        memset(edge,-1,sizeof(edge));
        memset(cnt,0,sizeof(cnt));
        for(int i=0; i<n+m; i++) {
            scanf("%d%d",&p[i].x,&p[i].y);
        }
        for(int i=0; i<n+m-1; i++) {
            for(int j=i+1; j<n+m; j++) {
                if(LL(p[i].x-p[j].x)*(p[i].x-p[j].x)+LL(p[i].y-p[j].y)*(p[i].y-p[j].y)<=LL(r)*r)
                    edge[i+1][j+1]=edge[j+1][i+1]=1;
            }
        }
        for(int i=1; i<=n+m; i++) edge[i][i]=0;
        for(int i=n+1; i<=n+m; i++) cnt[i][i]=1;
        for(int k=1; k<=n+m; k++) {
            for(int i=1; i<=n+m; i++) {
                for(int j=1; j<=n+m; j++) {
                    //printf("k:%d i:%d j:%d\n",k,i,j);
                    if(edge[i][k]==-1||edge[k][j]==-1) {
                        continue;
                    }
                    if(edge[i][j]==-1||edge[i][k]+edge[k][j]<edge[i][j]) {
                        if(k>n) {
                            if(cnt[i][k]+cnt[k][j]-1<=kk) {
                                edge[i][j]=edge[i][k]+edge[k][j];
                                cnt[i][j]=cnt[i][k]+cnt[k][j]-1;
                            }
                        } else {
                            if(cnt[i][k]+cnt[k][j]<=kk) {
                                edge[i][j]=edge[i][k]+edge[k][j];
                                cnt[i][j]=cnt[i][k]+cnt[k][j];
                            }

                        }
                    }
                }
            }
        }
        printf("%d\n",edge[1][2]-1);
    }
    return 0;
}
时间: 2024-10-21 09:44:57

【ACM】CCF-201403-4 无线网络 图论的应用的相关文章

NOIP2014无线网络发射器选址改编1

问题描述 随着智能手机的日益普及,人们对无线网的需求日益增大.某城市决定对城市内的公共场所覆盖无线网. 假设该城市的布局为由严格平行的129条东西向街道和129条南北向街道所形成的网格状,并且相邻的平行街道之间的距离都是恒定值1.东西向街道从北到南依次编号为0,1,2-128,南北向街道从西到东依次编号为0,1,2-128. 东西向街道和南北向街道相交形成路口,规定编号为x的南北向街道和编号为y的东西向街道形成的路口的坐标是(x, y). 在某些路口存在一定数量的公共场所 . 现在有w个相同型号

ThinkPad E430C从待机状态恢复后,无线网络就不可用了

神奇的问题,ThinkPad E430C从待机状态恢复后,无线网络就不可用了. Windows7系统,按Fn+F8或F7可以调节屏幕亮度,但是F9+Fn也没反应. 把驱动卸载了重新安装了也不管用,Windows诊断提示无线功能已关闭. 实在没办法,还是找个能上网的搜索一下吧,结果是需要修改BIOS: 开机按F1键 进入BIOS界面 进入config--network--wirless LAN Radio 选择ON,开启内部无线通信. 保存退出. 尼玛我就有事离开的时间比较长,电脑进入了待机状态,

洛谷 P2038 无线网络发射器选址(NOIp2014D2T1)

题目描述 随着智能手机的日益普及,人们对无线网的需求日益增大.某城市决定对城市内的公共场所覆盖无线网. 假设该城市的布局为由严格平行的129 条东西向街道和129 条南北向街道所形成的网格状,并且相邻的平行街道之间的距离都是恒定值 1 .东西向街道从北到南依次编号为0,1,2-128 , 南北向街道从西到东依次编号为0,1,2-128 . 东西向街道和南北向街道相交形成路口,规定编号为x 的南北向街道和编号为y 的东西向街道形成的路口的坐标是(x , y ). 在 某 些 路口存在一定数量的公共

Wireless Network Watcher(无线网络监视器)

软件简介: Wireless Network Watcher 是一个可以扫描你的无线网络,并显示当前连接到您的网络的所有计算机和设备的列表的小工具.对于连接到您的网络的每台计算机或设备,将显示以下信息:IP地址.MAC地址.该公司生产的网卡.可选的计算机名称. 图片预览: 下载地址:http://dickmoore.cn/Down/wnetwatcher.zip

CCCC中国高校计算机大赛 - 网络技术挑战赛 - 无线网络技术 样题解析

一个AP当前正以4mW的功率传送数据.为了创建一个更大的无线蜂窝,需要将其信号强度增加6dB,请问新的传输功率应该是多少?D A. 8 mW B. 10 mW C. 12 mW D. 16 mW E. 24 mW 以下哪些术语正确描述了802.11n中MIMO的实现?(选择三项)CEF A.信道绑定 B.动态频率选择 C.最大比值合并 D.包聚合 E.空间多路复用 F.传输波束成形 802.11n是在802.11g和802.11a之上发展起来的一项技术,最大的特点是速率提升,理论速率最高可达60

无线网络的中间人攻击

1.原理 无线网络MITM攻击原理: 1.无线客户端通过无线AP上网. 2.攻击者向无线客户端发送欺骗报文. 3.攻击者向无线AP发送欺骗报文. 4.正常访问被重定向,无线客户端将访问攻击者所引导的域名或服务器. 2.无线网络欺骗攻击 1.无线欺骗攻击 ---Airpwn 2.基于软件的无线跳板攻击 3.基于硬件的无线跳板攻击 4.无线钓鱼 --WAPJack攻击 5.WAPFunnel攻击 3.基于硬件的伪造AP攻击 攻击者在探测出目标的诸如SSID.工作频道.MAC等相关信息,并在破解了无线

攻击WEP加密无线网络

1.介绍 针对客户端环境和无客户端环境下破解WEP的几类方法. 有客户端环境: 一般当前无线网络中存在活动的无线客户端环境,即有用户通过无线连接到无线AP上并正在进行上网等操作时. 无客户端环境: 1.当前无线网络中存在已连接的无线客户端,但该无线客户端没有进行上网等操作. 2.当前无线网络中没有任何无线客户端,但当前有用户通过有线方式连接至无线路由器,并通过该无线路由器进行上网等操作. 3.当前无线路由器上没有任何用户连接,无论有线无线.(几乎不可能破解). 2.注入攻击(有客户端) WEP破

WLAN 无线网络 01

正式开博,留下一些自己学习WLAN的一些收获. 第一点,什么是WLAN WLAN就是我们经常听到的Wi-Fi,是无线局域网 (Wireless Local Area Network)的简称.它是以射频无线微波通信技术构建的局域网. 第二点,WLAN有哪些标准 既然WLAN是一种射频通信技术,那就不可避免的会有一些标准.下面是一些常常被提及的一些WLAN标准 802.11,IEEE 802.11 (原始标准),或称之为IEEE 802.11-1997.IEEE 802.11-1999,是802.1

WLAN 无线网络 02

上篇记录了WLAN无线网络的基础, 这篇写一写WLAN的通信基础 首先,WLAN是无线电通信技术的一种,这就要谈到工作频率. 现在WLAN的工作频率主要集中在两个主要波段上,2.4GHz和5GHz.为什么会使用这两个主要频段呢?主要是因为这两个频段是各国免费开放的. 2.400-2.500GHz, ISM 频段,中文意思分别是工业的(Industrial).科学的(Scientific)和医学的(Medical)频段,因此顾名思义ISM频段就是各国免费开放给工业,科学和医学机构使用.使用这些频段