同样是二分+DLX即可。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#define LL __int64
using namespace std; const int maxn=;
const int maxc=;
const int maxr=;
const int inf=0x3f3f3f3f;
const double rinf=1e10;
int L[maxn], R[maxn], D[maxn], U[maxn], C[maxn];
int S[maxc], H[maxr], size;
int N,M,K;
struct City{
LL x,y;
}cities[maxr];
struct Radar{
int x,y;
}radar[maxc];
LL map[][];
///²»ÐèÒªSÓò
void Link(int r, int c)
{
S[c]++; C[size]=c;
U[size]=U[c]; D[U[c]]=size;
D[size]=c; U[c]=size;
if(H[r]==-) H[r]=L[size]=R[size]=size;
else {
L[size]=L[H[r]]; R[L[H[r]]]=size;
R[size]=H[r]; L[H[r]]=size;
}
size++;
}
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;
} int h(){///Óþ«È·¸²¸ÇÈ¥¹ÀËã¼ôÖ¦
int ret=;
bool vis[maxc];
memset (vis, false, sizeof(vis));
for (int i=R[]; i; i=R[i])
{
if(vis[i])continue;
ret++;
vis[i]=true;
for (int j=D[i]; j!=i; j=D[j])
for (int k=R[j]; k!=j; k=R[k])
vis[C[k]]=true;
}
return ret;
} int ans;
bool Dance(int k){
int t=h();
if(t+k>M) return false; //¸ù¾Ý¾ßÌåÎÊÌâÑ¡ÔñÏÞÖÆËÑË÷Éî¶È»òÖ±½ÓÇó½â¡£ A*Ëã·¨£¬´Ë´¦Ö»Çó×îÓŽâ
if(!R[]){
return true;
}
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(k+)) return true;
for (int j=L[i]; j!=i; j=L[j])
resume(j);
resume(i);
}
return false;
} void initL(int x){///col is 1~x,row start from 1
// ans=inf;
for (int i=; i<=x; ++i){
S[i]=;
D[i]=U[i]=i;
L[i+]=i; R[i]=i+;
}///¶ÔÁбíÍ·³õʼ»¯
R[x]=;
size=x+;///ÕæÕýµÄÔªËØ´Óm+1¿ªÊ¼
memset (H, -, sizeof(H));
///markÿ¸öλÖõÄÃû×Ö
} LL dabs(LL a){
if(a<) return -a;
return a;
} LL dist(int i,int j){
return (dabs(cities[i].x-cities[j].x)+dabs(cities[i].y-cities[j].y));
} void BuildLink(LL r){
for(int i=;i<=N;i++){
for(int j=;j<=N;j++){
if(map[i][j]<=r)
Link(i,j);
}
}
} void bin(){
LL Ans;
LL l=,r=20000000050ll,m;
ans=inf;
while(l<=r){
m=(l+r)/2ll;
ans=inf;
initL(N);
BuildLink(m);
if(Dance())
{ Ans=m; r=m-; }
else l=m+;
}
printf("%I64d\n",Ans);
} int main(){
int T,t=;
scanf("%d",&T);
while(T--){
scanf("%d%d",&N,&M);
for(int i=;i<=N;i++)
scanf("%I64d%I64d",&cities[i].x,&cities[i].y);
for(int i=;i<=N;i++){
for(int j=;j<=N;j++){
map[i][j]=dist(i,j);
// cout<<map[i][j]<<" ";
}
// cout<<endl;
}
printf("Case #%d: ",++t);
/* if(M==0){
cout<<"Yes"<<endl;
int Ans=inf;
for(int i=2;i<=N;i++){
if(map[1][i]<Ans) Ans=map[1][i];
}
printf("%d\n",Ans);
}
else*/
bin();
}
return ;
}

HDU 5046的更多相关文章

  1. HDU 5046 Airport(DLX反复覆盖)

    HDU 5046 Airport 题目链接 题意:给定一些机场.要求选出K个机场,使得其它机场到其它机场的最大值最小 思路:二分+DLX反复覆盖去推断就可以 代码: #include <cstd ...

  2. HDU 5046 Airport(dlx)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5046 题意:n个城市修建m个机场,使得每个城市到最近进场的最大值最小. 思路:二分+dlx搜索判定. ...

  3. hdu 5046 二分+DLX模板

    http://acm.hdu.edu.cn/showproblem.php?pid=5046 n城市建k机场使得,是每个城市最近机场的距离的最大值最小化 二分+DLX 模板题 #include < ...

  4. HDU 5046 Airport【DLX重复覆盖】

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5046 题意: 给定n个城市的坐标,要在城市中建k个飞机场,使城市距离最近的飞机场的最长距离最小,求这 ...

  5. HDU 5046 Airport ( Dancing Links 反复覆盖 )

    今年上海网络赛的一道题目 , 跟 HDU 2295 如出一辙 . 就是距离的计算一个是欧几里得距离 , 一个是曼哈顿距离 学完DLX感觉这题好水 ,就是一个裸的反复覆盖 注意下别溢出即可了 #incl ...

  6. hdu 5046 Airport 二分+重复覆盖

    题目链接 给n个点, 定义两点之间距离为|x1-x2|+|y1-y2|. 然后要选出k个城市建机场, 每个机场可以覆盖一个半径的距离. 求在选出点数不大于k的情况下, 这个半径距离的最大值. 二分半径 ...

  7. (中等) 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 ...

  8. NOI考前乱写

    还有13天NOI,把各种乱七八糟的算法都重新过一遍还是比较有必要的... //HDU 5046 Airport //DancingLink #include<iostream> #incl ...

  9. KUANGBIN带你飞

    KUANGBIN带你飞 全专题整理 https://www.cnblogs.com/slzk/articles/7402292.html 专题一 简单搜索 POJ 1321 棋盘问题    //201 ...

随机推荐

  1. mtools 是由MongoDB 官方工程师实现的一套工具集,可以很快速的日志查询分析、统计功能,此外还支持本地集群部署管理.

    mtools 是由MongoDB 官方工程师实现的一套工具集,可以很快速的日志查询分析.统计功能,此外还支持本地集群部署管理 https://www.cnblogs.com/littleatp/p/9 ...

  2. 动态规划---状压dp

    状压dp,就是把动态规划之中的一个个状态用二进制表示,主要运用位运算. 这里有一道例题:蓝书P639猛兽军团1 [SCOI2005]互不侵犯 题目: 题目描述 在N×N的棋盘里面放K个国王,使他们互不 ...

  3. php 原生简版日志导出

    <?phpfunction writeLog($msg){ $logFile = date('Y-m-d').'.txt'; $msg = date('Y-m-d H:i:s').' >& ...

  4. Error creating bean with name " "问题

    Spring MVC框架中使用@Autowired自动装配时出现 Error creating bean with name " "问题的解决方式在spring的xml配置文件be ...

  5. go之数组

    一.数组概念 go语言提供了数组类型的数据结构 数组是具有 [唯一类型] 的一组 [固定长度] 的数据项序列,这种类型可以是任意类型 二.数组声明 var variable_name [SIZE]va ...

  6. Win10,JDK8,tomact7.0.85配置

    今天在win10上配置了jdk以及tomact先前使用jdk7+tomact7.0.56运行失败. 后经调整后正确配置注意事项如下: 1.下载并按照jdk-8u161-windows-x64,默认安装 ...

  7. Hibernate搭建框架(一)

    什么是hibernate? hibernate是一个orm框架,实现了对JDBC的封装.通过xml文件来实现类和表之间的映射,这样就可以使用操作对象的方式来操作数据库. 官网:http://hiber ...

  8. 解决无法移除tomcat中的项目

    问题:启动myeclipse,tomcat提示报错,blind,但是你移除的时候无法移除,只会显示一个黄色的感叹号,此时你直接在webapp中删除时,也提示呗占用无法删除. 办法:关掉myeclips ...

  9. 复习java的例子(第一天)

    1. 编写程序:从键盘上读入一个学生成绩, 存放在变量score中,根据score的值输出其对应的成绩等级: score>=90 等级: A 70=<score<90 等级: B 6 ...

  10. MSP430之section(1)

    1 Intro The smallest unit of an object file is a section. A section is a block of code or data that ...