poj 3565 ants
/*
poj 3565 递归分治
还有用KM的做法
这里写的分治 按紫书上的方法
不过那里说的有点冗杂了
可以简化一下
首先为啥可以分治 也就是分成子问题解决
只要有一个集合 黑白的个数相等 就一定能一一匹配
这个应该比较明显
因为是special judge
所以我们只要保证每次处理的集合黑白相等就好了
关键是怎么分
我们找到最下最左的点 作为基点
然后将其他的按照连线与横坐标夹角的大小排序
这样就相当于那个线逆时针扫一遍
当扫过去的黑白相等(都为0也可以)并且当前这个可以和基点不同色
也就是他俩能匹配 那显然当前这三部分 (扫过去的 没扫的 还有这条线)
都满足黑白相等 也就是说都能独立的匹配
然后分治就好了
*/
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<algorithm>
#define maxn 210
using namespace std;
int n,match[maxn];
struct node{
int x,y,c,v;
}p[maxn],bas;
int cmp1(const node &a,const node &b){
return (a.y==b.y&&a.x<b.x)||a.y<b.y;
}
int cmp2(const node &a,const node &b){
double A=atan2(double(a.y-bas.y),double(a.x-bas.x));
double B=atan2(double(b.y-bas.y),double(b.x-bas.x));
return A<B;
}
void Dfs(int l,int r){
if(l>r)return;
sort(p+l,p+r+,cmp1);
bas=p[l];
sort(p+l+,p+r+,cmp2);
int s1=,s2=,k=l+;
while(s1!=s2||p[k].c==bas.c){
if(p[k].c==bas.c)s1++;
else s2++;k++;
}
if(bas.c==)match[bas.v]=p[k].v;
else match[p[k].v]=bas.v;
Dfs(l+,k-);Dfs(k+,r);
}
int main()
{
scanf("%d",&n);
memset(match,,sizeof(match));
for(int i=;i<=n;i++){
scanf("%d%d",&p[i].x,&p[i].y);
p[i].c=;p[i].v=i;
}
for(int i=+n;i<=n+n;i++){
scanf("%d%d",&p[i].x,&p[i].y);
p[i].c=;p[i].v=i-n;
}
Dfs(,n+n);
for(int i=;i<=n;i++)
printf("%d\n",match[i]);
return ;
}
poj 3565 ants的更多相关文章
- POJ 3565 Ants 【最小权值匹配应用】
传送门:http://poj.org/problem?id=3565 Ants Time Limit: 5000MS Memory Limit: 65536K Total Submissions: ...
- POJ 3565 Ants(最佳完美匹配)
Description Young naturalist Bill studies ants in school. His ants feed on plant-louses that live on ...
- POJ 3565 Ants (最小权匹配)
题意 给出一些蚂蚁的点,给出一些树的点,两两对应,使他们的连线不相交,输出一种方案. 思路 一开始没想到怎么用最小权匹配--后来发现是因为最小权匹配的方案一定不相交(三角形两边之和大于第三边)--还是 ...
- POJ 1852 Ants || UVA 10881 - Piotr's Ants 经典的蚂蚁问题
两题很有趣挺经典的蚂蚁问题. 1.n只蚂蚁以1cm/s的速度在长为L的竿上爬行,当蚂蚁爬到竿子的端点就会掉落.当两只蚂蚁相撞时,只能各自反向爬回去.对于每只蚂蚁,给出距离左端的距离xi,但不知道它的朝 ...
- POJ 1852 Ants(贪心)
POJ 1852 Ants 题目大意 有n只蚂蚁在木棍上爬行,每只蚂蚁的速度都是每秒1单位长度,现在给你所有蚂蚁初始的位置(蚂蚁运动方向未定),蚂蚁相遇会掉头反向运动,让你求出所有蚂蚁都·掉下木棍的最 ...
- poj 3565 uva 1411 Ants KM算法求最小权
由于涉及到实数,一定,一定不能直接等于,一定,一定加一个误差<0.00001,坑死了…… 有两种事物,不难想到用二分图.这里涉及到一个有趣的问题,这个二分图的完美匹配的最小权值和就是答案.为啥呢 ...
- [POJ 3565] Ant
[题目链接] http://poj.org/problem?id=3565 [算法] KM算法求最小匹配 [代码] #include <algorithm> #include <bi ...
- poj 1852 ants 题解《挑战程序设计竞赛》
地址 http://poj.org/problem?id=1852 题目描述 Description An army of ants walk on a horizontal pole of len ...
- poj 2565 Ants (KM+思维)
Ants Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 4125 Accepted: 1258 Special Ju ...
随机推荐
- C#错误与异常处理
C# 提供了几个关键字(try.catch 和 finally),程序可以用这些关键字检测异常.处理异常并继续运行.这些关键字是让应用程序更可靠的非常有用的工具. class tryAndCatch ...
- [操作系统]iOS6与iOS7屏幕适配技巧
一.没有包装任何 导航控制器 或者 UITabBarController 1.控制器的view是UIScrollView\UITableView\UICollectionView时(控制器是UITab ...
- Delphi实现HTMLWebBrowser实现HTML界面
HTML的界面有以下特点:图文混排,格式灵活,可以包含Flash.声音和视频等,实现图文声像的多媒体界面,而且易于建立和维护.另外,HTML的显示环境一般机器上都具备,通常不需要安装额外的软件.当然, ...
- Apache OFBiz
Apache OFBiz® Apache OFBiz offers a great deal of functionality, including: advanced e-commerce cata ...
- Android日志框架darks-logs使用教程
一.配置文件 在使用darks-logs之前,我们需要为它创建一个名叫logd.properties的配置文件.如果你是需要在JAVA或WEB上使用该组件,那么你可以像配置log4j一样将它放在cla ...
- 最好的JAVA IDE IntelliJ IDEA使用简介(一)—之界面元素
打开IDEA,(当第一次打开的时候出现的是一个欢迎页面,随便创建一个project来进入到IDEA的主界面),主界面显示如下: 主界面由6个主要区域组成(图中红色数字标注的) 1.菜单和工具栏 2.导 ...
- [LeetCode#187]Repeated DNA Sequences
Problem: All DNA is composed of a series of nucleotides abbreviated as A, C, G, and T, for example: ...
- mysql中的timestamp类型时间比较:unix_timestamp函数
在mysql中,某字段的类型设置为了timestamp,那么我们现在希望取出指定时间段的记录,该如何做呢? 在php中有time()和strtotime()来进行日期和时间戳的格式化,而在mysql中 ...
- 博弈论(男人八题):POJ 1740 A New Stone Game
A New Stone Game Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 5694 Accepted: 3119 ...
- JQuery中如何click中传递参数
代码如下: click(data,fn)中的data其实是json对象,取的时候,只能通过当前的事件源来取,data是默认放在event中的,所以这里的data是eventdata,引用的时候也使用e ...