POJ 3565 Ants

POJ 3565 Ants(二分图最小权完备匹配) 题意:给定平面上同样多的黑点和白点,要求输出一种方案使得所有匹配的点的连线两两不相交。 思路:构造一个二分图,黑点白点之间的边的权值为两点的欧几里得距离,那么问题就转化为了求二分图的最小权匹配。这是因为如果最小权匹配有两条线段相交,那么一定可以转化为两条不相交且总长度更短的两条线段,这与最小权矛盾,所以可以证明最小权匹配中没有相交的线段。 #include #include #include 阅读详情

KM 模板题

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<vector>
#include<queue>
using namespace std;

const int MAXN = 107;
const int INF = 1<<27;
const double eps = 1e-6;
struct KM {
	double dt[MAXN][MAXN];
	double lx[MAXN], ly[MAXN], slack[MAXN];
	int match[MAXN];
	int n;
	bool vx[MAXN], vy[MAXN];
	void init(int n) { this->n = n;}
	void add(int u, int v, double d) { dt[u][v] = d;}
	
	bool dfs(int u) {
		vx[u] = true;
		double tmp;
		for(int i = 1; i <= n; i++) {
			if(vy[i]) continue;
			tmp = lx[u] + ly[i] - dt[u][i];
			if(tmp < eps) {
				vy[i] = true;
				if(match[i] == -1 || dfs(match[i]))
				{
					match[i] = u;
					return true;
				}
			}
			else slack[i] = min(slack[i], tmp);
		}
		return false;
	}
	void km() {
		int i, j, k;
		memset(match, -1, sizeof(match));
		memset(ly, 0, sizeof(ly));
		for(i = 1; i <= n; i++){
			lx[i] = dt[i][1];
			for(j = 2; j <= n; j++) lx[i] = max(lx[i], dt[i][j]);
		}
		for(k = 1; k <= n; k++) {
			for(i = 1; i <= n; i++) slack[i] = INF;
			while(true) {
				memset(vx, 0, sizeof(vx));
				memset(vy, 0, sizeof(vy));
				if(dfs(k)) break;
				double nmin = INF;
				for(i = 1; i <= n; i++) {
					if( !vy[i]) nmin = min(nmin, slack[i]);
				}
				for(i = 1; i <= n; i++) {
					if(vx[i]) lx[i] -= nmin;
					if(vy[i]) ly[i] += nmin;
					else slack[i] -= nmin;
				}
			}
		}
	}
}km;

int x[2][MAXN], y[2][MAXN];
int link[MAXN];

double dist(int x1, int y1, int x2, int y2) {
	return sqrt( (double)(x1-x2)*(x1-x2) + (y1-y2)*(y1-y2) );
}

int main() {
	int n, i, j;
	while(~scanf("%d", &n)){
		km.init(n);
		for(i = 1; i <= n; i++) scanf("%d%d", &x[0][i], &y[0][i]);
		for(i = 1; i <= n; i++) scanf("%d%d", &x[1][i], &y[1][i]);
		for(i = 1; i <= n; i++) {
			for(j = 1; j <= n; j++) {
				km.add(i, j, -dist(x[0][i], y[0][i], x[1][j], y[1][j]));
			}
		}
		km.km();
		for(i = 1; i <= n; i++) {
			for(j = 1; j <= n; j++) if(km.match[j] == i) {
				printf("%d\n", j);
			}
		}
	}
	return 0;
}


深入解析SOC芯片设计中DFT OCC与ATPG的协同优化策略 本文深入探讨了在复杂SOC芯片设计中,DFT(可测试性设计)的核心组件OCC(片上时钟控制器)与ATPG(自动测试向量生成)的协同优化策略。文章从基本原理出发,分析了OCC作为测试时钟管理者的关键作用,以及ATPG作为故障检测引擎的工作机制,并重点阐述了二者在测试架构选择、参数对齐、低功耗测试等场景下的协同方法与实战技巧,旨在实现更高的测试覆盖率与更低的测试成本。 阅读详情

相关推荐

# 执行 DISM 命令时出错 87 未在此上下文中识别出 restorehealth 选项。解决方法

# 执行 DISM 命令时出错 87 未在此上下文中识别出 restorehealth 选项。解决方法

段子手168的博客 1万+

poj1852 蚂蚁

题目名称: 一群蚂蚁在一根长L厘米的水平杆子上行走,每个蚂蚁的速度恒定为1厘米/秒。当一只行走的蚂蚁到达极点时,它马上就会从上面掉下来。当两只蚂蚁相遇时,它们会掉头朝相反的方向走。我们知道蚂蚁在杆子的最初位置,但是不知道蚂蚁行走的方向,最后计算所有蚂蚁从杆子坠落的最早和最迟的可能时间。 输入要求: 第一行包含一个整数,表示实验的次数。第二行有两个数,分别表示杆子的长度和蚂蚁的数量,第三行表示...

dream_coke的博客 949

Allegro PCB设计实战:5分钟搞定DDR信号线的Match Group等长规则设置

本文详细介绍了在Allegro PCB设计中,如何快速为DDR信号线设置Match Group等长规则。通过实战演练,解析了从理解相对传输延迟原理、在规则管理器中创建Match Group,到设置合理容差和利用动态绕线指示的全流程,帮助工程师在5分钟内高效完成高速信号时序约束,提升设计可靠性与效率。

gg901的博客 1055

一队蚂蚁在一根水平杆上行走,每只蚂蚁固定速度 1cm/s. 当一只蚂蚁走到杆的尽头时,立即从秆上掉落. 当两只蚂蚁相遇时它们会掉头向相反的方向前进. 我们知道每只蚂蚁在杆上的初始位置, 但是, 我们不

#include<stdio.h> #include #include using namespace std; const int maxn = 1000000+10; int c[maxn]; int main() { int n,a,b,i; int tmin,tmax; scanf("%d",&n); while(n–) { tmin=tmax=0; scanf("%d...

weixin_44863327的博客 2080

QCPColorMap实现瀑布图

QCPColorMap实现真正的瀑布图

pf1873252141的博客 5272

Cursor Pro版保姆级开通教程:绕过7天试用,支付宝一步搞定(附地区报错解决方案)

本文详细介绍了Cursor Pro版的订阅流程,包括支付宝支付步骤和解决区域报错的实用方案。针对开发者常见的网络问题和云服务器配置需求,提供了从本地环境调整到云端部署的完整指南,帮助用户高效解锁Pro版的代码补全、私有代码库等核心功能。

weixin_28710999的博客 2107

有n只蚂蚁在一根木棍上,蚂蚁们只知道距左端的距离,棍子的长度,但不知道他们的朝向,蚂蚁们走到端点的时候会落下木棍,求所有蚂蚁们走过的最短和最长路程。

本题目看似很难,其实很简单,就下几行代码。自己模拟一下过程就可以发现可以将蚂蚁间走过的路程互相补在一起的话。 若有n只蚂蚁。 Sn = n只蚂蚁走过的路程总和;    an = 棍子长度 - 此蚂蚁距某端的最短距离; Sn = an的前n项求和   在代码中 int x[n];  之所以可以编译的原因是在之上有     int n,length;     scanf("%d%d",&a...

xlh006的博客 2485

解决 python2.7中 ImportError: No module named Crypto.Signature

我的解决办法,先查看有没有安装 pip,直接执行pip 回车 没有出现null什么的就安装了,如果没有安装去其他博客哪里看一下,正常情况是默认就有的,然后使用。发现我自己也不会啊,就百度看看,想着网上的解决方法一大片,但是都是废话,能用的没有几个,而且能安装的没有几个。这个里面的python2、3就是系统里面的python版本,直接跟我这样就可以了除非版本不一样,也就是没有这个版本。就可以使用了,第一个应该是卸载之前的,然后重新安装,我的就是这样解决的。就比如我的,我现在使用的 python2.7。

记录一下 1611

蚂蚁爬行问题

问题主题:Ants(POJ  No.1852) 问题描述: n只蚂蚁以每秒1cm的速度在长为Lcm的竹竿上爬行。当蚂蚁看到竿子的端点时就会落下来。由于竿子太细,两只蚂蚁相遇时,它们不能交错通过,只能各自反方向爬行。对于每只蚂蚁,我们只知道它离竿子最左端的距离为xi,但不知道它当前的朝向。请计算所有蚂蚁落下竿子的最短时间和最长时间。   限制条件: 16

阳光日志 1万+

【PCIe 总线及设备入门学习专栏 6.2 -- PCIe VDM (Vendor Defined Messages)】

在PCIe协议中,Vendor Defined Messages (VDMs) 是一种允许厂商定义和传输特定功能的消息类型。这种机制扩展了标准 PCIe 消息的功能,可以用于实现供应商自定义的功能,例如固件更新、设备配置和诊断信息传输。PCIe VDM 是通过实现的,它遵循 PCIe 协议栈的结构,包括事务层、数据链路层和物理层。

CodingCos的博客 1898

国科大学习资料--高级软件工程-复习题选择题答案

国科大学习资料–高级软件工程(罗铁坚 魏峻 刘丹)-复习题选择题答案 ’‘

无名何许人的博客 1166

【POJ3565】ANTS KM算法

【POJ3565】ANTS 题意:平面上有2*n个点,N白N黑。为每个白点找一个黑点与之连边,最后所有边不交叉。求一种方案。 题解:KM算法真是一个神奇的算法,虽然感觉KM能做的题用费用流都能做~ 本题用到的结论:当选出的点对之间的距离之和最小时,一定使所有边都不交叉 这个感觉很容易理解,自己画画图就能看出来,就是难想啊 然后跑最小权值匹配,方法是将边权都变成相反数,然后跑最大...

aodanchui1057的博客 199

【原创教程】西门子1500与施耐德伺服的通讯以及调试

该函数块主要描述伺服的手动,左边的引脚Forward是指伺服手动正转,Backward是指伺服手动反转,Fast是指手动的某个方向为快速运行,TipPos手册上描述为固定值,WaitTIme是指伺服手动的相应时间,VeloSlow指伺服手动正常慢速运动的速度,VeloFast指伺服手动快速运动的速度,Acceleration是指伺服手动的加速度,Decelertion是指伺服手动的减速度。该函数块用于伺服停止,左边的引脚Execute为伺服停止执行,Deceleration含义为减速,Axis为轴。

Qinmingyue13的博客 1375

POJ3565Ants

Ants Time Limit:5000MS Memory Limit:65536K Total Submissions:8345 Accepted:2651 Special Judge Description Young naturalist Bill studies ants in school. His ants feed ...

Luowaterbi的博客 225

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

POJ3565-Ants

Ants Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 4251   Accepted: 1309   Special Judge Description Young naturalist Bill studies ants in school. His an

ecjtu_acm_菜鸟—鱼尾尾 789

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

poj 3565 ants

/* poj 3565 递归分治 还有用KM的做法 这里写的分治 按紫书上的方法 不过那里说的有点冗杂了 可以简化一下 首先为啥可以分治 也就是分成子问题解决 只要有一个集合 黑白的个数相等 就一定能一一匹配 这个应该比较明显 因为是special judge 所以我们只要保证每次处理的集合黑白相等就好了 关键是怎么分 我们找到最下最左的点 作为基点 然后将其...

weixin_30822451的博客 144

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

[poj3565]Ants

[poj3565]Ants 标签(空格分隔):二分图 描述 Young naturalist Bill studies ants in school. His ants feed on plant-louses that live on apple trees. Each ant colony needs its own apple tree to feed itself. Bill has a...

weixin_30731287的博客 83

poj3565 Ants

题目描述:AntsTime Limit: 5000msMemory Limit: 65536KB This problem will be judged on PKU. Original ID: 3565 64-bit integer IO format: %lld Java class name: Main Prev Submit Status Statistics Di

ruclion的专栏 579

POJ3565 Ants

题目大意有n只蚂蚁,要爬到n棵树上,使每只蚂蚁爬到没棵树上,且两只蚂蚁的路径不能交叉。问是否存在一种方案,若有,输出任意一种方案。Solution我们可以发现,若两只蚂蚁的路径交叉,那么交换一下这两只蚂蚁要爬上去的树,肯定能使总路程减少,这样的路径一定不是最小匹配。所以最小匹配一定是合法的路径。所以以任意蚂蚁到任意树间的距离为边权,求出带权二分图最小匹配就一定是其中一种方案。剩下的就是KM的模板。代

HJQ的博客 301

poj3565Ants【线段相交判断】

Language: Default Ants Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 4788   Accepted: 1515   Special Judge Description Young naturalist Bill studies

走一步再走一步 717

poj3565 ants

/* km 最小权匹配 左边是树,右边是蚂蚁 */ #include #include #include #include #include using namespace std; #define MAXN 105 #define inf 999999999.0 #define eps 1e-5 struct Point {     double x;     do

Rutifrl的博客 369

poj 3565——Ants

题意:给出蚂蚁和树的坐标,求蚂蚁和树距离最小的匹配

char256 723

POJ3565 Ants【二分图最佳匹配】

题目链接: http://poj.org/problem?id=3565 题目大意: 在坐标系中有N只蚂蚁,N棵苹果树,给你蚂蚁和苹果树的坐标。让每只蚂蚁去一棵苹果树, 一棵苹果树对应一只蚂蚁。这样就有N条直线路线,问:怎样分配,才能使总路程和最小,且 N条线不相交。 思路: 用一个图来说明思路。 假设A、B为蚂蚁,C、D为苹果树。则存在两种匹配:第一种

程序员充电站(itcharge) 2455

poj 3565 Ants KM

题意: 给n只蚂蚁和n课苹果树的坐标,要让每只蚂蚁去一棵苹果树,路线不能重复,求一种可行方案。 分析: 当某种匹配可行时蚂蚁所走的距离和是最小的,可以直接用KM算法求二分图最小权值匹配。还有一种做法是先假定一种匹配,如果其中有交叉就进行调整。 代码: //poj 3565 //sep9 #include #include using namespace std; const in

sepNINE的专栏 1531

poj3565-Ants

poj3565-Ants Ants Time Limit: 5000MS Memory Limit: 65536K Special Judge Description Young naturalist Bill studies ants in school. His ants feed on plant-louses that live on apple trees

weixin_40433319的博客 302
上一篇: Uva 11090 Going in Cycle!!
下一篇: Uva 11248 Frequency Hopping
MakingMaker
博客等级 码龄15年 6粉丝 108原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值