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


相关推荐

  • mysql 数据库连接_java连接oracle数据库

    mysql 数据库连接_java连接oracle数据库原理:Oracle数据网关,就像一个桥梁,贯通oracle数据库和non-oracle数据库。在配置过程中,我们经常讲到的三个重要文件:第一、tnsnames.ora;第二、lisener.ora;第三、init.ora。他们是如何工作呢?比如对一个连接数据库的查询,select*from“tablename”@linkdbname;oracle首先从linkdbname开始,通过dba_d…

    2022年9月14日
    1
  • ipfs矿机挖币是骗局(ipfs挖矿用什么网络)

    友情提示:Filecoin还没上线,任何打着Filecoin旗号说现在就能挖矿的都是骗纸!币圈人对挖矿这件事情上心还得要扯到比特币。2012年的时候,阿瓦隆的创始人开发了ASIC芯片,当时ASIC矿机一面世,平均一天可以挖到375枚比特币!你没有看错是375枚!按照当时的比特币价格计算,阿瓦隆一天的挖矿收入就是20万元型态人民币!赚的盆满钵满! 时光一去不复返,如今的比特币挖矿行业竞争已经进入白…

    2022年4月14日
    52
  • 使用深度图重建世界坐标

    使用深度图重建世界坐标参考网址:https://blog.csdn.net/puppet_master/article/details/77489948首先建立一个绘制世界坐标的项目。保证物体的顶点在0到1范围之内,这样颜色能够有意义的表示物体的世界坐标位置。然后编写一个shader,用于绘制世界坐标位置:Shader&amp;amp;amp;amp;amp;amp;amp;quot;Unlit/DrawWorldPoint&amp;amp;amp;amp;amp;amp;amp;quo

    2022年5月8日
    46
  • 一个简单的WPF字体选择器实现

    很久没有写博客了。这是放暑假中的第一篇博客,以后会多多更新!!!这就是我写的一个字体选择器,界面如下:本程序用到的技术比较简单,仅仅是用了Font类的几个方法和数据绑定而已。首先建一个四行两列

    2021年12月27日
    39
  • mac redis安装_如何启动redis

    mac redis安装_如何启动redisMac安装Redis,原来就是这么简单_MarkJava-CSDN博客_mac安装redis注意:安装brew之前需要切换到普通用户,命令为su用户名。如果在root用户模式下安装报错

    2025年6月9日
    1
  • 压缩感知中的数学知识:投影矩阵(projection matrix)

    压缩感知中的数学知识:投影矩阵(projection matrix)题目:压缩感知中的数学知识:投影矩阵(projectionmatrix)========================背景========================

    2022年10月5日
    3

发表回复

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

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