#include <bits/stdc++.h>
using namespace std;
struct DLX
{const static int maxn=64,maxm=64,maxnode=maxn*maxn;int n,m,sz,anssz;int u[maxnode],d[maxnode],l[maxnode],r[maxnode],row[maxnode],col[maxnode];//row col 记录该节点i坐标int h[maxn],colcnt[maxm];void init(int _n,int _m) //数据位于1,1...n,m
    {n=_n,m=_m;for(int i=0;i<=m;i++)//1..m是每一列的辅助结点 0代表(0,0)即head
        {u[i]=d[i]=i;l[i]=i-1;r[i]=i+1;col[i]=i;row[i]=0;colcnt[i]=0;}l[0]=m;r[m]=0;sz=m;anssz=INT_MAX;for(int i=1;i<=n;i++)h[i]=-1;}void push(int x,int y){colcnt[y]++;col[++sz]=y;row[sz]=x;d[sz]=d[y]; //加入列首元素后面u[sz]=y;u[d[y]]=sz;d[y]=sz;if(h[x]<0) h[x]=r[sz]=l[sz]=sz; //成为行首元素else{int hd=h[x]; //加入行首节点右边l[sz]=hd;r[sz]=r[hd];l[r[hd]]=sz;r[hd]=sz;}}void repeat_remove(int x){for(int i=d[x];i!=x;i=d[i])l[r[i]]=l[i],r[l[i]]=r[i];}void repeat_resume(int x){for(int i=u[x];i!=x;i=u[i])l[r[i]]=r[l[i]]=i;}int H(){static bool vis[maxm];memset(vis,0,sizeof vis);int res=0;for(int i=r[0];i!=0;i=r[i]){ //如果该列未被标标记,则标记该列中每行的列if(vis[i]) continue;res++;vis[i]=1;for(int j=d[i];j!=i;j=d[j])for(int k=r[j];k!=j;k=r[k]) vis[col[k]]=1;}return res;//易证res <= ans-dep
    }void repeat_dance(int dep){if(r[0]==0){anssz=min(anssz,dep); return ;}if(dep+H()>=anssz) return ;int cur=r[0];for(int i=r[0];i!=0;i=r[i]) if(colcnt[i]<colcnt[cur])cur=i;
//        repeat_remove(cur);for(int i=d[cur];i!=cur;i=d[i]){repeat_remove(i);for(int j=r[i];j!=i;j=r[j]) repeat_remove(j);repeat_dance(dep+1);for(int j=l[i];j!=i;j=l[j]) repeat_resume(j);repeat_resume(i);}
//        repeat_resume(cur);
    }
};
DLX dlx;
struct point{double x,y;double dis(const point &a){return hypot(a.x-x,a.y-y);}
};
point city[64],radar[64];
bool le(double a,double b)
{if(a<b)return true;
}
int main()
{
#ifdef shuaishuaifreopen("in.txt","r",stdin);
#endif // shuaishuai
//二分裸重复覆盖int t;scanf("%d",&t);while(t--){int n,m,k;scanf("%d%d%d",&n,&m,&k);for(int i=0;i<n;i++)scanf("%lf%lf",&city[i].x,&city[i].y);for(int i=0;i<m;i++)scanf("%lf%lf",&radar[i].x,&radar[i].y);double l=0,r=2000;do{double mi=(l+r)/2;static bool vis[64];memset(vis,0,sizeof vis);int cnt=0;dlx.init(m,n);for(int i=0;i<m;i++)for(int j=0;j<n;j++)if(radar[i].dis(city[j])<=mi){if(!vis[j]) vis[j]=true,cnt++;dlx.push(i+1,j+1);}if(cnt!=n) {l=mi;continue;}dlx.repeat_dance(0);if(dlx.anssz>k) l=mi;else r=mi;}while(r-l>1e-7);printf("%.6f\n",(l+r)/2);}return 0;
}

转载于:https://www.cnblogs.com/polya/p/9758224.html

hdu 2298 Radar 重复覆盖相关推荐

  1. hdu 2295 Radar 重复覆盖+二分

    题目链接 给m个雷达, n个城市, 以及每个城市的坐标, m个雷达里只能使用k个, 在k个雷达包围所有城市的前提下, 求最小半径. 先求出每个雷达到所有城市的距离, 然后二分半径, 如果距离小于二分的 ...

  2. hdu 3498 whosyourdaddy 重复覆盖

    #include <bits/stdc++.h> using namespace std; struct DLX {const static int maxn=64,maxm=64,max ...

  3. hdu 3498 whosyourdaddy (重复覆盖,DLX+迭代加深A*)

    题意:有一个英雄,他有一个技能,可以使一个点和与他相邻的点受到伤害,问最少攻击几个点可以使所有点至少被伤害一次. 思路:DLX.很裸.设行为每一个点,列为攻击点,在这里行元素与列元素都为n.然后DLX ...

  4. dancing links(舞蹈链)——求解精准覆盖及重复覆盖问题

    以下转自:https://blog.csdn.net/the_star_is_at/article/details/53425736 问题描述: 给定一个n*m的矩阵,有些位置为1,有些位置为0.如果 ...

  5. hdu 2295 Radar DLX 重复覆盖问题

    http://acm.hdu.edu.cn/showproblem.php?pid=229 题意: 一个国家有n个城市,m个雷达,我们同时操作的雷达数最多为k,给出城市与国家的坐标,求小于等于k的操作 ...

  6. ACM练级日志:HDU 4735(ACM 成都网络赛) 重复覆盖与DLX

    今天费了一下午+一晚上的劲,终于把重复覆盖问题给解决了.作为这算法的牺牲品的就是成都网络赛让我知道DLX这东西存在的那道题,HDU 4735.这也是第一次尝试独立对问题构造矩阵然后调用DLX得出结果的 ...

  7. hdu - 3498 - whosyourdaddy(重复覆盖DLX)

    题意:N(2 ≤ N ≤ 55)个点,M(0 ≤ M ≤ N*N)条无向边,删除一个点会把与其相邻的点一起删掉,问最少删几次可以删掉所有点. 题目链接:http://acm.hdu.edu.cn/sh ...

  8. HDU 3498 whosyourdaddy DLX重复覆盖

    题目: http://acm.hdu.edu.cn/showproblem.php?pid=3498 题意: 有 n n个敌人,其中有mm对敌人互为邻居,当你攻击杀死一个敌人时,同时会杀死它所有的邻居 ...

  9. HDU 3498 whosyourdaddy(DLX重复覆盖)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3498         n个点,m条无向边,删除一个点会把与其相邻的点一起删掉,问最少删几次可以删掉所有 ...

最新文章

  1. 从源码分析DEARGUI之键盘鼠标事件监控
  2. 电脑其他设备android打问号,电脑设备管理器里的其它设备打问号,怎么解决啊?
  3. java如何获得相反的颜色_javascript – 如何根据当前颜色生成相反的颜色?
  4. 安全策略_Spring Security 实战干货:如何实现不同的接口不同的安全策略
  5. MongoDB快速入门(五)- Where子句
  6. 面向对象---基础概念
  7. 本地传奇架设详细教程
  8. linux中yum -y install mysql为什么默认是mariadb?以及mysql yum源的配置
  9. 从0开发豆果美食小程序——搜索组件
  10. Golang基础(1)
  11. 使用Famo.us 创建高性能移动 UI
  12. 从西刺代理爬取代理ip,并验证是否可用
  13. android电池电量监控,android电量监控 Battery Widget Reborn
  14. Unity创建2.5D地图 【1】
  15. SharePoint ULS Log Viewer 日志查看器
  16. python-布尔值取反
  17. python金融实战 源代码_穆棱市seo总代直销python金融量化营业实战课程 python量化项目实战源码+课件+视频...
  18. 如何优化cocos2d-x手游内存
  19. Retrofit+mvp+购物车
  20. 【馬鹿騒ぎに抗うシリーズ】小児インフルエンザと漢方対処法----ツムラ医家向けメイルマガジンより

热门文章

  1. [iOS、Unity、Android] 浅谈闭包的使用方法
  2. Python-hrvanalysis库 挖掘心电信号特征 方法总结
  3. drawer的用法_drawer是什么意思_drawer的翻译_音标_读音_用法_例句_爱词霸在线词典...
  4. 纯前端解码、播放、录音、编码 AMR 音频,无须服务器支持
  5. ​复盘共享经济2020:陷入艰难求生困境,转型能否拯救亏损怪圈
  6. 高一对口计算机试题及答案,高一计算机考试模拟题?
  7. Mysql 学习教程
  8. 斐波纳契数(c语言)
  9. ps如何增加可撤回的步数
  10. pandas中DataFrame的常用操作