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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 阿里短信单发,批量发送_如何用阿里小号发短信

    阿里短信单发,批量发送_如何用阿里小号发短信1.导入<!–阿里云短信–><dependency><groupId>com.aliyun</groupId><artifactId>aliyun-java-sdk-core</artifactId>&lt…

    2025年6月25日
    2
  • DNS递归和迭代过程详解

    DNS递归和迭代过程详解目录DNS原理解析DNS进化史DNS结构DNS查询流程DNS服务搭建DNS相关软件的安装服务器搭建规划手把手教你搭建基本DNS服务器搭建主DNS服务器搭建从DNS服务器参考文献DNS原理解析DNS进化史etc/hosts–&gt;NIS–&gt;DNS起初域名和ip地址之间的解析都是完全存放在一个名为hosts的文件当中…

    2022年6月6日
    49
  • 二进制与十进制的相互转换

    二进制与十进制的相互转换博客引用处(以下内容在原有博客基础上进行补充或更改,谢谢这些大牛的博客指导):二进制如何转十进制,十进制如何转二进制十进制转二进制转成二进制主要有以下几种:正整数转二进制,负整数转二进制,小数转二进制;1、正整数转成二进制。要点一定一定要记住哈:除二取余,然后倒序排列,高位补零。也就是说,将正的十进制数除以二,得到的商再除以二,依次类推知道商为零或一时为止,然后在旁边标出各步的余数,…

    2022年10月17日
    4
  • jvm调优常用工具

    jvm调优常用工具常用的JVM调优工具:Jconsole,jProfile,VisualVMJconsole:jdk自带,功能简单,但是可以在系统有一定负荷的情况下使用。对垃圾回收算法有很详细的跟踪。详细说明参考这里JProfiler:商业软件,需要付费。功能强大。详细说明参考这里VisualVM:JDK自带,功能强大,与JProfiler类似。推荐。调优的方法观察内存释放情况、集合类检查、对象树上…

    2022年5月8日
    82
  • 2021MySql-8.0.26安装详细教程(保姆级)

    2021MySql-8.0.26安装详细教程(保姆级)MySql-8.0.26安装详细教程保姆级下载安装包安装配置配置环境变量下载安装包下载安装包:下载网址:https://dev.mysql.com/downloads/选择这个进入后选择直接下载第一个点击这里,开始下载安装配置解压安装包我这里解压到d盘打开编写MySQL配置文件在解压目录下新建my.ini文件将下面文本拷贝进my,ini文件中[mysqld]#设置3306端口port=3306#设置mysql的安装目录———-是你的文件路径-

    2022年4月28日
    46
  • 由于Redis后门漏洞导致服务器被注入挖矿脚本解决过程

    由于Redis后门漏洞导致服务器被注入挖矿脚本解决过程由于Redis后门漏洞导致服务器被注入挖矿脚本解决过程事件描述某一天的早晨,我还是像往常一样搭着公交车开启打工仔的一天,一早8.30就到办公室了,坐着玩手机等上班,就这这时突然我组长飞快的回来办公室,回来就说快看看阿里云后台服务,服务是不是挂掉了,我当时就纳闷了一大早的流量不大怎么就宕机了呢,不一会我组长收到了阿里云短信通知监测到恶意脚本,接下来就是脚本的查找前期处理首先是通过阿里云的控制台发现,查看到恶意的进程PID,通过ps-ef|greap5724的确看到了当前进程,前期处理我只

    2022年7月14日
    18

发表回复

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

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