hdu2295DLX重复覆盖+二分
题目是说 给了n个城市 m个雷达 你只能选择其中的k个雷达进行使用 你可以设置每个雷达的半径,最后使得所有城市都被覆盖,要求雷达的半径尽可能的小(所有雷达的半径是一样的)
二分最小半径,然后每次重新建立这个十字链表,跑dlx
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <string.h>
#include <cmath>
using namespace std;
const int maxnode=;
const int maxm=;
int K;
struct DLX
{
int n,m,siz;
int U[maxnode],D[maxnode],R[maxnode],L[maxnode],row[maxnode],
col[maxnode];
int H[maxm],S[maxm];
int anss,ans[maxm];
void init(int n,int m)
{
this->n=n;
this->m=m;
for(int i=; i<=n; i++)
{
S[i]=;
U[i]=D[i]=i;
L[i]=i-;
R[i]=i+;
}
R[n]=; L[]=n;
siz=n+;
for(int i=; i<=m; i++)
H[i]=-;
}
void Link(int r, int c)
{
row[siz]=r;
col[siz]=c;
S[c]++;
D[siz]=c;
U[siz]=U[c];
D[U[siz]]=siz;
U[D[siz]]=siz;
if(H[r]<)
{
H[r]=L[siz]=R[siz]=siz;
}
else
{
L[siz]=H[r];
R[siz]=R[H[r]];
R[L[siz]]=siz;
L[R[siz]]=siz;
H[r]=siz;
}
siz++;
}
void remove(int c)
{
for(int i=D[c]; i!=c; i=D[i])
L[R[i]]=L[i],R[L[i]]=R[i];
}
void resume(int c)
{
for(int i=U[c]; i!=c; i=U[i])
L[R[i]]=R[L[i]]=i;
}
bool v[maxnode];
int AX()
{
int ret=;
for(int c=R[]; c!=; c=R[c])v[c]=true;
for(int c=R[]; c!=; c=R[c])
if(v[c])
{
ret++;
v[c]=false;
for(int i=D[c]; i!=c; i=D[i])
for(int j=R[i]; j!=i; j=R[j])
v[col[j]]=false;
}
return ret;
}
bool Dance(int d)
{
if(d+AX()>K)return false;
if(R[]==)return d<=K;
int c=R[];
for(int i=R[]; i!=; i=R[i])
if(S[i]<S[c])c=i;
for(int i=D[c]; i!=c; i=D[i])
{
remove(i);
for(int j=R[i]; j!=i; j=R[j])remove(j);
if(Dance(d+))return true;
for(int j=L[i]; j!=i; j=L[j])resume(j);
resume(i);
}
return false;
}
}g;
const double eps=1e-;
struct Point{
int x,y;
void input()
{
scanf("%d%d",&x,&y);
}
}city[maxm],station[maxm];
double dis(Point a, Point b)
{
return sqrt((double)(a.x-b.x)*(a.x-b.x)+(double)(a.y-b.y)*(a.y-b.y));
}
int main()
{
int T;
int n,m;
scanf("%d",&T);
while(T--)
{
scanf("%d%d%d",&n,&m,&K);
for(int i= ;i<n; i++)city[i].input();
for(int i=; i<m; i++)station[i].input();
double l=,r=1e8;
while(r-l>=eps)
{
double mid=(l+r)/;
g.init(n,m);
for(int i=; i<m; i++)
for(int j=; j<n; j++)
if(dis(station[i],city[j])<mid-eps)
g.Link(i+,j+);
if(g.Dance())r=mid-eps;
else l=mid+eps;
}
printf("%.6lf\n",l);
}
return ;
}
hdu2295DLX重复覆盖+二分的更多相关文章
- HDU5046 Airport dancing links 重复覆盖+二分
这一道题和HDU2295是一样 是一个dancing links重复覆盖解决最小支配集的问题 在给定长度下求一个最小支配集,只要小于k就行 然后就是二分答案,每次求最小支配集 只不过HDU2295是浮 ...
- hdu3656Fire station(DLX重复覆盖 + 二分)
题目请戳这里 题目大意:一个城市n个点,现在要建m个消防站,消防站建在给定的n个点中.求建m个消防站后,m个消防站要覆盖所有的n个点的覆盖半径最小. 题目分析:重复覆盖问题,DLX解决.不过要求覆盖半 ...
- hdu5046(重复覆盖+二分)
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=5046 题意:要在n个城市里建造不超过k个机场覆盖所有城市,问机场城市之间最大距离最小为多少. 分析:二 ...
- hdu2295(重复覆盖+二分)
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=2295 题意::一个国家有n个城市,有m个地方可以建造雷达,最多可以建K个雷达(K>=1 & ...
- hdu 2295 dlx重复覆盖+二分答案
题目大意: 有一堆雷达工作站,安放至多k个人在这些工作站中,找到一个最小的雷达监控半径可以使k个工作人所在的雷达工作站覆盖所有城市 二分半径的答案,每次利用dlx的重复覆盖来判断这个答案是否正确 #i ...
- (中等) HDU 5046 Airport ,DLX+可重复覆盖+二分。
Description The country of jiuye composed by N cites. Each city can be viewed as a point in a two- d ...
- (中等) HDU 2295 , DLX+重复覆盖+二分。
Description N cities of the Java Kingdom need to be covered by radars for being in a state of war. S ...
- hdu5064 DLX可重复覆盖+二分
这题题意是 给了n个城市 在其中小于等于k个城市建立机场然后 使得最远的那个离机场的城市距离最短 二分答案 ,我们对于每次的mid 重新建图然后再来一次DLX,每个点可以覆盖的点建立一条联系就ok了 ...
- hdu 2295 Radar 重复覆盖+二分
题目链接 给m个雷达, n个城市, 以及每个城市的坐标, m个雷达里只能使用k个, 在k个雷达包围所有城市的前提下, 求最小半径. 先求出每个雷达到所有城市的距离, 然后二分半径, 如果距离小于二分的 ...
随机推荐
- 洛谷P3233 世界树 [HNOI2014] 虚树
正解:虚树 解题报告: 传送门! 首先看到这种就要想到虚树这个是毫无疑问的QwQ 建虚树什么的都可以循规蹈矩地做,不说辣,具体可以看下虚树学习笔记什么的看下板子 但是建好虚树之后怎么搞还是有点儿讲究, ...
- MySQL+InnoDB semi-consitent read原理及实现分析(转)
add by zhj: 主要讲的是在MySQL在Repeatable Read和Read Committed级别下,加锁时的不同,在Read Committed隔离级别下,只对where 中满足条件的 ...
- sed命令 windows与linux换行
Linux的Bash命令中有一个sed操作,SSD的create_list.sh中有用到这个操作: 结合着下面这个解释: 也就是删除所有行里面的以VOC2007/Annotations/(这里的\代表 ...
- 8.0-uC/OS-III临界段
1.临界段 (临界段代码,也叫临界区,是指那些必须完整连续运行,不可被打断的代码段) 锁调度器,可以执行ISR,开启调度器不可执行ISR: (1).临界段代码,也称作临界域,是一段不可分割的代码. u ...
- UPDATE 时主键冲突引发的思考【转】
假设有一个表,结构如下: root::> create table t1 ( -> id int unsigned not null auto_increment, ', -> pr ...
- Win版:Adobe 全系列软件模拟授权注册破解工具 AMT Emulator V0.9.2
http://www.lookae.com/amtemulator-092/ 下载地址 https://files.cnblogs.com/files/simadi/AMT0.9.rar 支持软件:W ...
- 在WCF服务端的web.config中增加如下设置,具体的错误会记录在.svclog文件中
<system.diagnostics> <sources> <source name="System.ServiceModel" switchVal ...
- 转换区别json
private Date EndDate ; private Instant xxxxdate; private LocalDateTime localDateTime; public static ...
- PHP注册器模式
[Register.class.php] <?php /** * 注册器模式 * 全局共享和交换对象 */ class Register { protected static $objects; ...
- Android 7.0下,拍摄照片报错
对于面向 Android 7.0 的应用,Android 框架执行的 StrictMode API 政策禁止在您的应用外部公开 file:// URI.如果一项包含文件 URI 的 intent 离开 ...