同样是二分+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 ;
}

最新文章

  1. 移动端手势库hammerJS 2.0.4官方文档翻译
  2. openstack上创建vm实例后,状态为ERROR问题解决
  3. angularjs---select使用---默认值及联动
  4. OS X thrift setup
  5. [Java] 03 String获取文件后缀名,判断文件是否合法
  6. JLink 软件复位、Halt及运行小工具
  7. 2.1.5 用SSS扫描器实施扫描
  8. Objective-C 【电商APP应用代码-系统分析-详细注释-代码实现】
  9. HDU4527+BFS
  10. Agri-Net(prim算法,最小生成树问题)
  11. C#获取文件夹下指定格式的所有文件
  12. NYOJ 110 剑客决斗
  13. 集群提交spark任务命令
  14. mongoDB-权限控制
  15. Python2048小游戏demo
  16. Agile敏捷开发Planning Poker简介
  17. selenium(一)--selenium 家族
  18. mongodb-分组分页
  19. 1、Dubbo-分布式系统定义
  20. 12款jQuery幻灯片插件和幻灯片特效教程

热门文章

  1. Django day05 虚拟环境 django 2.0和django 1.0 路由层区别
  2. 从flink-example分析flink组件(1)WordCount batch实战及源码分析
  3. c#,Java aes加密
  4. Last-Modified If-Modified-Since ETag If-None-Match
  5. IIS 7.0、IIS 7.5 和 IIS 8.0 使用的 HTTP 状态代码【转载自微软官方】
  6. Java中final、finally、finalize的区别与用法
  7. (转) 前端模块化:CommonJS,AMD,CMD,ES6
  8. .Net并行计算支持嵌套事务的方法
  9. (转) Arcgis for js加载百度地图
  10. java输入输入流图解