hdu 2295 DLX

时间:2022-10-26 21:50:39

思路:裸的DLX重复覆盖

#include<set>
#include<cmath>
#include<queue>
#include<cstdio>
#include<vector>
#include<string>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#define pb push_back
#define mp make_pair
#define Maxn 51
#define Maxm 80002
#define LL __int64
#define Abs(x) ((x)>0?(x):(-x))
#define lson(x) (x<<1)
#define rson(x) (x<<1|1)
#define inf 1000000
#define lowbit(x) (x&(-x))
#define clr(x,y) memset(x,y,sizeof(x))
#define Mod 1000000007
using namespace std;
int D[Maxn*Maxn],U[Maxn*Maxn],L[Maxn*Maxn],R[Maxn*Maxn],S[Maxn*Maxn],C[Maxn*Maxn],H[Maxn],id,K,n,m,cnt;
bool vi[Maxn];
struct Point{
double x,y;
}city[Maxn],rader[Maxn];
double dis[Maxn][Maxn],edge[Maxn*Maxn];
double Dis(Point a,Point b)
{
return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
}
void init(int m)
{
int i;
for(i=;i<=m;i++){
D[i]=U[i]=i;
L[i+]=i;
R[i]=i+;
S[i]=;
}
R[m]=;
id=m+;
}
void ins(int r, int c)
{
U[id] = c;
D[id] = D[c];
U[D[c]] = id;
D[c] = id;
if (H[r] < )
H[r] = L[id] = R[id] = id;
else
{
L[id] = H[r];
R[id] = R[H[r]];
L[R[H[r]]] = id;
R[H[r]] = id;
}
S[c]++;
C[id++] = c;
}
void Remove(int c)
{
int i;
for(i=D[c];i!=c;i=D[i]){
L[R[i]]=L[i];
R[L[i]]=R[i];
}
}
void Resume(int c)
{
int i;
for(i=D[c];i!=c;i=D[i]){
L[R[i]]=i;
R[L[i]]=i;
}
}
int A()
{
int i,j,k,ret=;
memset(vi,false,sizeof(vi));
for(i=R[];i;i=R[i]) if(!vi[i]){
ret++;
for(j=D[i];j!=i;j=D[j]){
for(k=R[j];k!=j;k=R[k])
vi[C[k]]=true;
}
}
return ret;
}
int dfs(int step)
{
if(step+A()>K) return false;
if(R[]==) return true;
int i,j,temp,c;
temp=inf;
for(i=R[];i;i=R[i]) if(S[i]<temp){
temp=S[i];
c=i;
}
for(i=D[c];i!=c;i=D[i]){
Remove(i);
for(j=R[i];j!=i;j=R[j]){
Remove(j);
}
if(dfs(step+))
return true;
for(j=R[i];j!=i;j=R[j])
Resume(j);
Resume(i);
}
return false;
}
void build(int pos)
{
int i,j;
init(n);
for(i=;i<=m;i++){
H[i]=-;
for(j=;j<=n;j++){
if(dis[i][j]<=edge[pos])
ins(i,j);
}
}
}
void solve()
{
int i,j,l,r,mid;
l=,r=cnt;
while(l<r){
mid=(l+r)>>;
build(mid);
if(dfs())
r=mid;
else
l=mid+;
}
printf("%.6lf\n",edge[l]);
}
int main()
{
int t,i,j;
scanf("%d",&t);
while(t--){
scanf("%d%d%d",&n,&m,&K);
for(i=;i<=n;i++)
scanf("%lf%lf",&city[i].x,&city[i].y);
for(i=;i<=m;i++)
scanf("%lf%lf",&rader[i].x,&rader[i].y);
cnt=;
for(i=;i<=m;i++)
for(j=;j<=n;j++){
dis[i][j]=Dis(rader[i],city[j]);
edge[++cnt]=dis[i][j];
}
sort(edge+,edge++cnt);
int num=;
for(i=;i<=cnt;i++) if(edge[i]!=edge[num]){
edge[++num]=edge[i];
}
cnt=num;
solve();
}
return ;
}

hdu 2295 DLX的更多相关文章

  1. &lpar;中等&rpar; HDU 2295 &comma; DLX&plus;重复覆盖&plus;二分。

    Description N cities of the Java Kingdom need to be covered by radars for being in a state of war. S ...

  2. hdu 2295 dlx重复覆盖&plus;二分答案

    题目大意: 有一堆雷达工作站,安放至多k个人在这些工作站中,找到一个最小的雷达监控半径可以使k个工作人所在的雷达工作站覆盖所有城市 二分半径的答案,每次利用dlx的重复覆盖来判断这个答案是否正确 #i ...

  3. 搜索(DLX重复覆盖模板):HDU 2295 Radar

    Radar Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

  4. HDU 2295&period;Radar &lpar;DLX重复覆盖&rpar;

    2分答案+DLX判断可行 不使用的估计函数的可重复覆盖的搜索树将十分庞大 #include <iostream> #include <cstring> #include &lt ...

  5. &lbrack;ACM&rsqb; HDU 2295 Radar &lpar;二分法&plus;DLX 重复覆盖)

    Radar Problem Description N cities of the Java Kingdom need to be covered by radars for being in a s ...

  6. HDU 2295 Radar 重复覆盖 DLX

    题意: N个城市,M个雷达站,K个操作员,问雷达的半径至少为多大,才能覆盖所有城市.M个雷达中最多只能有K个同时工作. 思路: 二分雷达的半径,看每个雷达可以覆盖哪些城市,然后做重复覆盖,判断这个半径 ...

  7. HDU 2295 Radar &lpar;DLX &plus; 二分&rpar;

    Radar Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

  8. HDU 2295 Radar (重复覆盖)

    Radar Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

  9. HDU 3909 DLX

    http://blog.csdn.net/sr_19930829/article/details/39756513 http://www.kuangbin.net/archives/hdu4069-d ...

随机推荐

  1. 解决Jenkins console输出乱码

    背景 Jenkins console输出乱码,如 ������������� 1 解决办法 Jenkins Master 设置utf8 encoding Tomcat 启动脚本 export JAVA ...

  2. 新手学习Cocoapods教程

    CocoaPods简介 当你开发iOS应用时,会经常使用到很多第三方开源类库,比如AFNetWorking等等.手动去下载所需类库十分麻烦.另外一种常见情况是,你项目中用到的类库有更新,你必须得重新下 ...

  3. 如何做好多语言(小语种)网站SEO

    摘自http://www.life-cream.com/how-to-do-multi-language-seo/ 这篇文章在今年4月就开了头,一直到今天才把坑填好,我是有多懒.在动笔之前本来有个前缀 ...

  4. jquery 关于event&period;target使用的几点说明介绍

    event.target说明:引发事件的DOM元素. this和event.target的区别js中事件是会冒泡的,所以this是可以变化的,但event.target不会变化,它永远是直接接受事件的 ...

  5. 以太网PHY 芯片之 MII&sol;MDIO接口详解

    本文主要分析MII/RMII/SMII,以及GMII/RGMII/SGMII接口的信号定义,及相关知识,同时本文也对RJ-45接口进行了总结,分析了在10/100模式下和1000M模式下的设计方法. ...

  6. Codeforces Round &num;402 &lpar;Div&period; 2&rpar; D&period; String Game

    D. String Game time limit per test 2 seconds memory limit per test 512 megabytes input standard inpu ...

  7. hdmi中深度色彩像素打包

    4个色彩像素包模式:24- 30- 36- 48- 不同模式下tmds时钟与与像素的比是位宽与24的比值 . 24 bit mode: TMDS clock = 1.0 x pixel clock ( ...

  8. 主元素问题 Majority Element

    2018-09-23 13:25:40 主元素问题是一个非常经典的问题,一般来说,主元素问题指的是数组中元素个数大于一半的数字,显然这个问题可以通过遍历计数解决,时间复杂度为O(n),空间复杂度为O( ...

  9. LOJ 2553 「CTSC2018」暴力写挂——边分治&plus;虚树

    题目:https://loj.ac/problem/2553 第一棵树上的贡献就是链并,转化成 ( dep[ x ] + dep[ y ] + dis( x, y ) ) / 2 ,就可以在第一棵树上 ...

  10. 使用原子类或synchronized(没用Lock)解决阐述多线程所遇到线程安全问题和解决方案

    例子题目: 创建10个线程,每个线程执行10000次加1,输出总和 正常结果100000  但是如果出现线程不安全会低于100000 import java.util.concurrent.Count ...