HDU 5046 Airport(dlx)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5046
题意:n个城市修建m个机场,使得每个城市到最近进场的最大值最小。
思路:二分+dlx搜索判定。
#include <iostream>
#include <map>
#include <string>
#include <stdio.h>
#include <vector>
#include <set>
#include <algorithm>
#include <string.h>
#include <fstream>
#include <tchar.h>
#include <sstream>
using namespace std;
];
int KK;
int m;
class CDancingLinks
{
protected:
struct DancingLinksNode
{
DancingLinksNode* left;
DancingLinksNode* right;
DancingLinksNode* down;
DancingLinksNode* up;
int col;
int row;
};
typedef DancingLinksNode Node;
int *m_columnEleNumbers;
int m_colNumber;
int m_rowNumber;
Node* m_pool;
Node** m_head;
int m_curUsePoolIndex;
void _Remove(Node* cur)
{
--m_columnEleNumbers[cur->col];
for(Node* p=cur->down;p!=cur;p=p->down)
{
p->left->right=p->right;
p->right->left=p->left;
}
}
void _Resume(Node* cur)
{
++m_columnEleNumbers[cur->col];
for(Node* p=cur->up;p!=cur;p=p->up)
{
p->left->right=p;
p->right->left=p;
}
}
int astar()
{
Node* p=_GetNode();
++KK;
;
for(Node* q=p->left;q!=p;q=q->left) if(KK!=visit[q->col])
{
visit[q->col]=KK;
++ans;
for(Node* r=q->up;r!=q;r=r->up) for(Node* t=r->left;t!=r;t=t->left)
{
visit[t->col]=KK;
}
}
return ans;
}
bool _SearchSolution(const int depth,std::vector<int> &solution)
{
Node* p=_GetNode();
if(p->left==p) return true;
if(depth+astar()>m) return false;
;
;
for(Node* q=p->left;q!=p;q=q->left)
{
if(m_columnEleNumbers[q->col]<Min)
{
Min=m_columnEleNumbers[q->col];
MinColumnIndex=q->col;
}
}
for(Node* q=_GetNode(MinColumnIndex)->down;q!=_GetNode(MinColumnIndex);q=q->down)
{
_Remove(q);
solution.push_back(q->row);
for(Node* rr=q->right;rr!=q;rr=rr->right) _Remove(rr);
,solution)) return true;
for(Node* rr=q->left;rr!=q;rr=rr->left) _Resume(rr);
solution.pop_back();
_Resume(q);
}
return false;
}
Node* _GetNode(int id) { return m_pool+id; }
void _ReleaseMemory()
{
if(m_columnEleNumbers)
{
delete[] m_columnEleNumbers;
m_columnEleNumbers=nullptr;
}
if(m_pool)
{
delete[] m_pool;
m_pool=nullptr;
}
if(m_head)
{
delete[] m_head;
m_head=nullptr;
}
}
public:
CDancingLinks():m_colNumber(-),m_rowNumber(-),
m_columnEleNumbers(nullptr),m_pool(nullptr),m_head(nullptr) {}
/***
列下标为[1,Column]
***/
CDancingLinks(const int Column,const int Row):
m_columnEleNumbers(nullptr),m_pool(nullptr),m_head(nullptr)
{
SetSize(Column,Row);
}
/***
列下标为[1,Column]
***/
void SetSize(const int Column,const int Row)
{
m_colNumber=Column;
m_rowNumber=Row;
_ReleaseMemory();
m_columnEleNumbers=];
m_pool=)+];
m_head=];
Clear();
}
void Clear()
{
;i<=m_colNumber;++i)
{
Node* cur=_GetNode(i);
cur->left=((i==m_colNumber)?_GetNode():_GetNode(i+));
cur->right=((==i)?_GetNode(m_colNumber):_GetNode(i-));
m_columnEleNumbers[i]=;
cur->up=cur->down=_GetNode(i);
cur->col=i;
cur->row=;
}
;i<=m_rowNumber;++i) m_head[i]=NULL;
m_curUsePoolIndex=m_colNumber+;
}
~CDancingLinks()
{
_ReleaseMemory();
}
void AddElement(const int row,const int col)
{
Node* cur=m_pool+(m_curUsePoolIndex++);
cur->up=_GetNode(col);
cur->down=_GetNode(col)->down;
m_pool[col].down->up=cur;
m_pool[col].down=cur;
if(m_head[row]==NULL)
{
m_head[row]=cur->left=cur->right=cur;
}
else
{
cur->left=m_head[row]->left;
cur->right=m_head[row];
m_head[row]->left->right=cur;
m_head[row]->left=cur;
}
++m_columnEleNumbers[col];
cur->col=col;
cur->row=row;
}
bool GetSolution(std::vector<int> &Solution)
{
,Solution);
}
};
][];
][];
int n;
];
CDancingLinks A;
inline long long dist(int i,int j)
{
]-a[j][]))+abs(a[i][]-a[j][]);
}
int ok(long long M)
{
A.Clear();
;i<=n;i++) ;j<=n;j++) if(dis[i][j]<=M)
{
A.AddElement(i,j);
}
vector<int> ans;
return A.GetSolution(ans);
}
long long cal()
{
A.SetSize(n,n);
;
int i,j;
;i<=n;i++) ;j<=n;j++) dis[i][j]=dist(i,j),d[num++]=dis[i][j];
sort(d,d+num);
int M=unique(d,d+num)-d;
,high=M-;
long long ans=d[high];
while(low<=high)
{
;
;
;
}
return ans;
}
int main()
{
int T;
scanf("%d",&T);
;i<=T;++i)
{
scanf("%d%d",&n,&m);
;j<=n;++j) scanf(],&a[j][]);
printf("Case #%d: %I64d\n",i,cal());
}
}
HDU 5046 Airport(dlx)的更多相关文章
- HDU 5046 Airport(DLX反复覆盖)
HDU 5046 Airport 题目链接 题意:给定一些机场.要求选出K个机场,使得其它机场到其它机场的最大值最小 思路:二分+DLX反复覆盖去推断就可以 代码: #include <cstd ...
- HDU 5046 Airport【DLX重复覆盖】
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5046 题意: 给定n个城市的坐标,要在城市中建k个飞机场,使城市距离最近的飞机场的最长距离最小,求这 ...
- (中等) 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 5046 二分+DLX模板
http://acm.hdu.edu.cn/showproblem.php?pid=5046 n城市建k机场使得,是每个城市最近机场的距离的最大值最小化 二分+DLX 模板题 #include < ...
- HDU 5046 Airport ( Dancing Links 反复覆盖 )
今年上海网络赛的一道题目 , 跟 HDU 2295 如出一辙 . 就是距离的计算一个是欧几里得距离 , 一个是曼哈顿距离 学完DLX感觉这题好水 ,就是一个裸的反复覆盖 注意下别溢出即可了 #incl ...
- hdu 5046 Airport 二分+重复覆盖
题目链接 给n个点, 定义两点之间距离为|x1-x2|+|y1-y2|. 然后要选出k个城市建机场, 每个机场可以覆盖一个半径的距离. 求在选出点数不大于k的情况下, 这个半径距离的最大值. 二分半径 ...
- HDU 3335 Divisibility (DLX)
Divisibility Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit ...
- 【HDOJ】5046 Airport
DLX简单题目. /* 5046 */ #include <iostream> #include <string> #include <map> #include ...
- HDU 2295.Radar (DLX重复覆盖)
2分答案+DLX判断可行 不使用的估计函数的可重复覆盖的搜索树将十分庞大 #include <iostream> #include <cstring> #include < ...
随机推荐
- 夺命雷公狗---node.js---8url模块和util模块
我们先到手册上看看: 上面很明显就写着返回一个对象. 再来看看util模块, 废话不哦多说,先上一点代码: /** * Created by leigood on 2016/8/13. */ var ...
- (第九周)视频发布及git统计报告
项目名:食物链教学工具 组名:奋斗吧兄弟 组长:黄兴 组员:李俞寰.杜桥.栾骄阳.王东涵 代码地址:HTTPS: https://git.coding.net/li_yuhuan/FoodChain. ...
- zw版【转发·台湾nvp系列Delphi例程】HALCON ClipRegion
zw版[转发·台湾nvp系列Delphi例程]HALCON ClipRegion procedure TForm1.Button1Click(Sender: TObject);var img : HI ...
- ASP.NET MVC5 新特性:Attribute路由使用详解 (转载)
1.什么是Attribute路由?怎么样启用Attribute路由? 微软在 ASP.NET MVC5 中引入了一种新型路由:Attribute路由,顾名思义,Attribute路由是通过Attrib ...
- mysql笔记05 优化服务器设置
优化服务器设置 1. MySQL有大量可以修改的参数--但不应该随便去修改.通常只需要把基本的项配置正确(大部分情况下只有很少一些参数时真正重要的),应将更多时间花在schema的优化.索引,以及查询 ...
- mysql字符串相关
使用MySQL,我们很多时候都会出现需要截取字符串的情况,所以关于字符串的截取的方式有必要记录下去. MySQL截取字符串的函数有: left(str, length):从左边开始截取,length是 ...
- linux设备驱动归纳总结(二):模块的相关基础概念【转】
本文转载自:http://blog.chinaunix.net/uid-25014876-id-59415.html linux设备驱动归纳总结(二):模块的相关基础概念 系统平台:Ubuntu 10 ...
- STM32内存跟FLASH问题
RO: 常量 ZI: 未初始化的全局变量 RW: 初始化的全局变量 Code: 程序本身 Code, RO-data,RW-data ..............flash RW-data, ZIda ...
- Web API 和 WCF 的比较
现在有很多可用的技术允许你创建被不同客户端所消费的服务,这些客户端可能是Web应用程序.Windows应用程序和移动应用等.服务可以支持http协议或者其他协议.接下来的讨论仅限于ASP.NET We ...
- 通过Oracle数据库访问控制功能的方法(Database access control)
修改sqlnet.ora文件中的IP列表后都需要重启监听才能生效.(原文是: Any changes to the values requires the TNS listener to be sto ...