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 map with coordinates of n <tex2html_verbatim_mark>ant colonies and n <tex2html_verbatim_mark>apple trees. He knows that ants travel from their colony to their feeding places and back using chemically tagged routes. The routes cannot intersect each other or ants will get confused and get to the wrong colony or tree, thus spurring a war between colonies.
Bill would like to connect each ant colony to a single apple tree so that all n <tex2html_verbatim_mark>routes are non-intersecting straight lines. In this problem such connection is always possible. Your task is to write a program that finds such connection.
On this picture ant colonies are denoted by empty circles and apple trees are denoted by filled circles. One possible connection is denoted by lines.
Input
Input has several dataset. The first line of each dataset contains a single integer number n <tex2html_verbatim_mark>(1n100) <tex2html_verbatim_mark>-- the number of ant colonies and apple trees. It is followed by n <tex2html_verbatim_mark>lines describing n <tex2html_verbatim_mark>ant colonies, followed byn <tex2html_verbatim_mark>lines describing n <tex2html_verbatim_mark>apple trees. Each ant colony and apple tree is described by a pair of integer coordinates x <tex2html_verbatim_mark>and y <tex2html_verbatim_mark>(- 10000x, y10000) <tex2html_verbatim_mark>on a Cartesian plane. All ant colonies and apple trees occupy distinct points on a plane. No three points are on the same line.
Output
For each dataset, write to the output file n <tex2html_verbatim_mark>lines with one integer number on each line. The number written on i <tex2html_verbatim_mark>-th line denotes the number (from 1 to n <tex2html_verbatim_mark>) of the apple tree that is connected to the i i<tex2html_verbatim_mark>-th ant colony. Print a blank line between datasets.
Sample Input
5 -42 58 44 86 7 28 99 34 -13 -59 -47 -44 86 74 68 -75 -68 60 99 -60
Sample Output
4 2 1 5 3
#include <cstdio> #include <cstring> #include <cmath> #include <algorithm> using namespace std; const int maxn = 100 + 10; const double INF = 1e30; int n; double W[maxn][maxn]; double Lx[maxn], Ly[maxn]; // 顶标 int left[maxn]; // left[i]为右边第i个点的匹配点编号 bool S[maxn], T[maxn]; // S[i]和T[i]为左/右第i个点是否已标记 bool eq(double a, double b) { return fabs(a-b) < 1e-9; } bool match(int i){ S[i] = true; for(int j = 1; j <= n; j++) if (eq(Lx[i]+Ly[j], W[i][j]) && !T[j]){ T[j] = true; if (!left[j] || match(left[j])){ left[j] = i; return true; } } return false; } void update(){ double a = INF; for(int i = 1; i <= n; i++) if(S[i]) for(int j = 1; j <= n; j++) if(!T[j]) a = min(a, Lx[i]+Ly[j] - W[i][j]); for(int i = 1; i <= n; i++) { if(S[i]) Lx[i] -= a; if(T[i]) Ly[i] += a; } } void KM() { for(int i = 1; i <= n; i++) { left[i] = Lx[i] = Ly[i] = 0; for(int j = 1; j <= n; j++) Lx[i] = max(Lx[i], W[i][j]); } for(int i = 1; i <= n; i++) { for(;;) { for(int j = 1; j <= n; j++) S[j] = T[j] = 0; if(match(i)) break; else update(); } } } int main(){ int kase = 0; while(scanf("%d", &n) == 1) { if(++kase > 1) printf("\n"); int x1[maxn], y1[maxn], x2[maxn], y2[maxn]; for(int i = 1; i <= n; i++) scanf("%d%d", &x1[i], &y1[i]); for(int i = 1; i <= n; i++) scanf("%d%d", &x2[i], &y2[i]); for(int i = 1; i <= n; i++) // ant colony for(int j = 1; j <= n; j++) //存成负数找最大值,相当于找最小值 W[j][i] = -sqrt((double)(x1[i]-x2[j])*(x1[i]-x2[j]) + (double)(y1[i]-y2[j])*(y1[i]-y2[j])); KM(); // 最大权匹配 for(int i = 1; i <= n; i++) printf("%d\n", left[i]);//x1[i]这个蚂蚁与x2[left[i]]这个蚂蚁匹配 } return 0; }
相关推荐
蚂蚁蚂蚁,Go语言中的爬虫大军——Go-ants-go开源分布式RESTful Golang爬虫引擎 在信息技术高速发展的今天,数据已经成为企业的核心竞争力之一。Web爬虫作为一种获取网络数据的重要手段,被广泛应用在数据分析、...
基于蚁群算法的路径规划_-ants-
Ansible-ants.zip,ants是一个使用ansible pull管理和应用macos和linux主机配置的框架。,ansible是一个简单而强大的自动化引擎。它用于帮助配置管理、应用程序部署和任务自动化。
4. **任务优先级**:ants还可以处理具有优先级的任务,高优先级的任务会优先被分配给goroutine执行。 5. **资源回收与复用**:ants实现了goroutine的复用机制,完成任务的goroutine不会立即销毁,而是回到池中等待...
線上學習入口網站系統簡介-Ants20050825
运动剂是对我以前的模拟的现代Lua重制。 这不是翻译,而是使用带有友好且流行的Lua语言的开源引擎Löve2D从头开始的翻拍。 最近的截图: (顺便说一句,我正在学习Git / Github,所以在我的第一个开放源代码“?...
singularity exec docker://fnndsc/pl-ants_n4biasfieldcorrection:0.2.7.1 bfc in/ out/ 多线程用于并行化输入。 CPU使用率可以使用等的容器发动机限于docker或podman 。 docker run --rm -u $( id -u ) : $( id ...
这个"ANTs-2.3.1.zip"压缩包包含的是ANTs的2.3.1版本,一个经过验证的稳定版本。该软件由医学成像社区广泛使用,特别是在研究大脑结构和功能连接性时。 ANTs的核心功能之一是图像配准,它能够将不同的影像数据对齐...
《ANTS-GUIDE》是一份指南文档,由Brian B. Avants、Nick Tustison和Hans Johnson撰写,属于Advanced Normalization Tools(ANTS)软件包的第二个主要版本发布说明。ANTS是一个医学图像处理的工具集,其主要功能包括...
《rusty-ants:用Rust构建的二维蚂蚁觅食模拟》 在计算机科学领域,模拟是理解和研究复杂系统行为的重要工具。本项目名为"rusty-ants",是一个使用Rust编程语言编写的2D图形模拟程序,专门用于模拟蚂蚁收集食物的...
总的来说,“Stymergic-Communication-Ants-Looking-for-Food”是一个综合性的编程练习,涵盖了生物学、算法、软件工程和可视化等多个领域的知识。通过实践,学生不仅能掌握一种实用的优化算法,还能体验到生物启发...
在"Code-Ants-main"这个压缩包文件中,可能包含了项目的源代码、预编译的二进制文件、文档、示例代码以及其他相关资源。通过查看这些内容,我们可以更深入地了解Code Ants的工作原理以及如何将其应用到实际开发中。...
vue+ant design of vue 商务模板 下载直接使用 可任意修改 -------------------------------------------------------------------------------------
### 高级归一化工具(ANTS):深入解析与应用 #### 一、简介 高级归一化工具(Advanced Normalization Tools,简称 ANTS)是一套开源软件包,主要功能在于实现医学图像的变形归一化处理。该工具集在处理大形变映射...
4. ImageMath:是ANTs中负责图像数学运算的组件,可以对图像进行各种数学运算,如加法、减法、乘法、除法等。 三、ANTs的使用方法 ANTs提供了多种使用方法,包括命令行模式、图形用户界面模式和脚本模式。用户可以...
【文件名称列表】:turtle-ants-master 这个文件名表明这是一个Git仓库的主分支,很可能包含了项目的源代码、资源文件以及相关文档。"master"通常是Git仓库的默认分支,代表了项目的主线开发。在这个项目中,你可以...
KM 最大时,要求改动最少**、**【HDU 3523】My Brute 求 KM 最大时,要求改动最少**:这些题目中的“KM”可能不是指KMP算法,而是指Kuhn-Munkres算法(也称匈牙利算法),用于解决赋权二分图的最大匹配问题,目标是在...
【标题】:“clojure-ants-simulation”是一个基于Clojure编程语言的项目,它是对Rich Hickey(Clojure的创建者)所实现的蚂蚁模拟的一个重构版本。这个模拟旨在研究和展示蚂蚁群体行为的复杂性和协作特性。 【描述...
资源分类:Python库 所属语言:Python 资源全名:ants_client-1.7b1-py2-none-any.whl 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
《Ants Performance Profiler 8:深度解析与应用实践》 Ants Performance Profiler 8是一款由Red Gate Software公司推出的高效性能分析工具,专为.NET应用程序设计,旨在帮助开发者识别并解决性能瓶颈,提升程序...