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;}

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • python3中pygame安装过程(超级详细)

    python3中pygame安装过程(超级详细)文章导航准备工作第一种方法:通过pip直接安装第二种方法:通过官网下载安装文件安装第三种:官网下载二进制文件安装第四:验证安装是否成功准备工作确定python安装路径:第一种方法:通过pip直接安装cmd打开命令行直接输入:pipinstallpygame或者pip3install-ihttps://pypi.tuna.tsinghua.edu.cn/simple…

  • luaJIT指令集介绍[通俗易懂]

    luaJIT指令集介绍[通俗易懂]luaJIT指令集介绍—————-目录—————(a)相关ByteCode定义介绍(b)lj_bc.h和lj_bc.c(1)字节码format简介(2)操作数的相关范围定义,和部分定义常量(3)通过掩码镜像,来获取相对应区域的值(4)通过掩码镜像,来设置相对应区域的值(5)合成实现操作符(6)关于字节码指令的定义

  • leetcode链表问题_c++反转链表

    leetcode链表问题_c++反转链表给你单链表的头指针 head 和两个整数 left 和 right ,其中 left <= right 。请你反转从位置 left 到位置 right 的链表节点,返回 反转后的链表 。示例 1:输入:head = [1,2,3,4,5], left = 2, right = 4输出:[1,4,3,2,5]示例 2:输入:head = [5], left = 1, right = 1输出:[5] 提示:链表中节点数目为 n1 <= n <= 500-500

  • MPLS 虚拟专用网络 Hub and Spoke实验

    MPLS 虚拟专用网络 Hub and Spoke实验

  • Burp Suite抓包讲解「建议收藏」

    Burp Suite抓包讲解「建议收藏」目录BurpSuite安装介绍BurpSuite抓包工具概述设置代理信息抓包的基本操作抓HTTPS包的证书设置BurpSuite安装介绍BurpSuite是一款集成化的渗透测试工具,包含了许多功能,可以帮助我们高效地完成对web应用程序的渗透测试和攻击。由Java语言编写,执行程序是Java文件类型的jar文件,免费版可在官网下载。环境运行时依赖JRE,需提前安装Java环境。百度JDK下载即可。(打开cmd,输入Java-version,便可查看版本信息)环境变量配置

  • Modelsim下载 安装 与 和谐教程

    Modelsim下载 安装 与 和谐教程一.下载ModelsimSE-642019.2-windows网盘分享:链接:https://pan.baidu.com/s/1BASOJ1DYZYrK9Ot_BRs7HA提取码:md4d二.安装下载完压缩包后解压,安装按下图所示步骤进行。注意,完全退出杀毒软件如360,否则可能安装/和谐失败。自此安装完成,下面进行和谐。三.和谐运行patch.dll会生成LICENSE.TXT文件,将此文件另存到modelsim安装路径下。建立用户环境变量:.

发表回复

您的电子邮箱地址不会被公开。

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