HDU 5046 Airport(DLX反复覆盖)

HDU 5046 Airport(DLX反复覆盖)

大家好,又见面了,我是全栈君。

HDU 5046 Airport

题目链接

题意:给定一些机场。要求选出K个机场,使得其它机场到其它机场的最大值最小

思路:二分+DLX反复覆盖去推断就可以

代码:

#include <cstdio>#include <cstring>using namespace std;const int MAXNODE = 4005;const int MAXM = 65;const int MAXN = 65;const int INF = 0x3f3f3f3f;int K;struct DLX {	int n, m, size;	int U[MAXNODE], D[MAXNODE], R[MAXNODE], L[MAXNODE], row[MAXNODE], col[MAXNODE];	int H[MAXN], S[MAXM];	int ansd, ans[MAXN];	void init(int n, int m) {		this->n = n;		this->m = m;		ansd = INF;		for(int i = 0; i <= m; i++) {			S[i] = 0;			U[i] = D[i] = i;			L[i] = i - 1;			R[i] = i + 1;		}		R[m] = 0; L[0] = m; 		size = m;		for(int i = 1; i <= n; i++)			H[i] = -1;	}	void Link(int r, int c) {		++S[col[++size] = c];		row[size] = r;		D[size] = D[c];		U[D[c]] = size;		U[size] = c;		D[c] = size;		if(H[r] < 0) H[r] = L[size] = R[size] = size;		else {			R[size] = R[H[r]];			L[R[H[r]]] = size;			L[size] = H[r];			R[H[r]] = 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;	}	bool v[MAXNODE];	int f() {		int ret = 0;		for(int c = R[0]; c != 0; c = R[c]) v[c] = true;		for(int c = R[0]; c != 0; c = R[c]) {			if(v[c]) {				ret++;				v[c] = false;				for(int i = D[c]; i != c; i = D[i])					for(int j = R[i]; j != i; j = R[j])						v[col[j]] = false;			}		}		return ret;	}	bool Dance(int d) {		if(d + f() > K) return false;		if(R[0] == 0) {			return d <= K;		}		int c = R[0];		for(int i = R[0]; i != 0; 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);			ans[d] = row[i];			if (Dance(d + 1)) return true;			for(int j = L[i]; j != i; j = L[j]) resume(j);			resume(i);		}		return false;	}} gao;typedef long long ll;int T, n;const int N = 65;struct City {	ll x, y;	void read() {		scanf("%I64d%I64d", &x, &y);	}} c[N];ll dis(City a, City b) {	ll dx = a.x - b.x; if (dx < 0) dx = -dx;	ll dy = a.y - b.y; if (dy < 0) dy = -dy;	return dx + dy;}int main() {	int cas = 0;	scanf("%d", &T);	while (T--) {		scanf("%d%d", &n, &K);		for (int i = 1; i <= n; i++) c[i].read();		ll l = 0, r = 100000000000LL;		while (l < r) {			ll mid = (l + r) / 2;			gao.init(n, n);			for (int i = 1; i <= n; i++) {				for (int j = 1; j <= n; j++) {					if (dis(c[i], c[j]) <= mid)						gao.Link(i, j);				}			}			if (gao.Dance(0)) r = mid;			else l = mid + 1;		}		printf("Case #%d: %I64d\n", ++cas, l);	}	return 0;}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/116190.html原文链接:https://javaforall.net

(0)
上一篇 2022年1月24日 下午9:00
下一篇 2022年1月24日 下午9:00


相关推荐

  • linux查看jdk安装目录

    linux查看jdk安装目录1 安装包方式安装的 jdk 如果是现在安装包安装的话 一般都会配置环境变量 echo JAVA HOME 或者查看 etc profilevi etc profile nbsp 2 yum 安装 nbsp 查看安装目录 nbsp nbsp 本人比较懒 就用的 yum 安装的 nbsp nbsp 先找到 javad 的执行目录 nbsp nbsp whereisjava 通过执行文件找到链接文件 ls lrt usr bin

    2025年8月25日
    6
  • 不动点与递归数列的极限有关吗_递推数列不动点法

    不动点与递归数列的极限有关吗_递推数列不动点法

    不动点与递归数列的极限
    有些收敛的数列才有不动点,比如x=1+x^(-1);x=1+x^(-2);x=1+x^(-3),下面写程序验证: 
    对x=1+x^(-3):
     
    (defunpow(numcount)
    (if(or(>count1)(eq count 1))
        (*num 
         (pownum 
            (-count1)

    2025年10月26日
    4
  • C多线程写入日志

    C多线程写入日志这里写自定义目录标题欢迎使用 Markdown 编辑器新的改变功能快捷键合理的创建标题 有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中 居左 居右 SmartyPants 创建一个自定义列表如何创建一个注脚注释也是必不可少的 KaTeX 数学公式新的甘特图功能 丰富你的文章 UML 图表 FLowchart 流程图导出与导入导出导入 public

    2026年3月16日
    2
  • 谷歌浏览器报错 Active resource loading counts reached to a per-frame

    谷歌浏览器报错 Active resource loading counts reached to a per-frame

    2021年11月8日
    86
  • (一)OpenClaw大龙虾-云端服务器部署-对接飞书-保姆级教程

    (一)OpenClaw大龙虾-云端服务器部署-对接飞书-保姆级教程

    2026年3月13日
    2
  • hostapd配置

    hostapd配置我们有个闲置的USB无线适配器(WIFI适配器),而我们的ISP路由器却是有线的。怎样把我们的家庭NAS服务器变成无线访问点(WAP),在不用买额外的WPA盒子的情况下,在Debian或Ubuntu系统下使用无线设备访问到它?你需要使用hostapd作为访问点和认证服务器。它实现了IEEE802.11访问点管理,IEEE802.1X/WPA/WPA2/EAP授权,RADIUS客户端,…

    2022年5月21日
    221

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号