【POJ3565】ANTS KM算法
【POJ3565】ANTS
题意:平面上有2*n个点,N白N黑。为每个白点找一个黑点与之连边,最后所有边不交叉。求一种方案。
题解:KM算法真是一个神奇的算法,虽然感觉KM能做的题用费用流都能做~
本题用到的结论:当选出的点对之间的距离之和最小时,一定使所有边都不交叉
这个感觉很容易理解,自己画画图就能看出来,就是难想啊
然后跑最小权值匹配,方法是将边权都变成相反数,然后跑最大权值匹配
不知道为什么以前写的KM算法会TLE,将求temp的过程拿到主函数里就过了
#include <cstdio>
#include <cstring>
#include <iostream>
#include <cmath>
using namespace std;
int n;
int xa[110],ya[110],xb[110],yb[110],va[110],vb[110],from[110],sta[110];
double dis[110][110],la[110],lb[110],temp;
int dfs(int x)
{
va[x]=1;
for(int i=1;i<=n;i++)
{
if(!vb[i]&&fabs(la[x]+lb[i]-dis[x][i])<1e-6)
{
vb[i]=1;
if(!from[i]||dfs(from[i]))
{
from[i]=x;
return 1;
}
}
}
return 0;
}
int main()
{
scanf("%d",&n);
int i,j,k;
for(i=1;i<=n;i++) scanf("%d%d",&xa[i],&ya[i]);
for(i=1;i<=n;i++) scanf("%d%d",&xb[i],&yb[i]);
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
dis[i][j]=-sqrt(1.0*(xa[i]-xb[j])*(xa[i]-xb[j])+(ya[i]-yb[j])*(ya[i]-yb[j]));
for(i=1;i<=n;i++)
for(j=2,la[i]=dis[i][1];j<=n;j++)
la[i]=max(la[i],dis[i][j]);
for(i=1;i<=n;i++)
{
while(1)
{
memset(va,0,sizeof(va));
memset(vb,0,sizeof(vb));
temp=99999999.999999;
if(dfs(i)) break;
for(j=1;j<=n;j++) if(va[j])
for(k=1;k<=n;k++) if(!vb[k])
temp=min(temp,la[j]+lb[k]-dis[j][k]);
for(j=1;j<=n;j++) if(va[j]) la[j]-=temp;
for(j=1;j<=n;j++) if(vb[j]) lb[j]+=temp;
}
}
for(i=1;i<=n;i++) sta[from[i]]=i;
for(i=1;i<=n;i++) printf("%d\n",sta[i]);
return 0;
}
【POJ3565】ANTS KM算法的更多相关文章
- poj3565 Ants km算法求最小权完美匹配,浮点权值
/** 题目:poj3565 Ants km算法求最小权完美匹配,浮点权值. 链接:http://poj.org/problem?id=3565 题意:给定n个白点的二维坐标,n个黑点的二维坐标. 求 ...
- poj 3565 uva 1411 Ants KM算法求最小权
由于涉及到实数,一定,一定不能直接等于,一定,一定加一个误差<0.00001,坑死了…… 有两种事物,不难想到用二分图.这里涉及到一个有趣的问题,这个二分图的完美匹配的最小权值和就是答案.为啥呢 ...
- ACM学习历程—POJ3565 Ants(最佳匹配KM算法)
Young naturalist Bill studies ants in school. His ants feed on plant-louses that live on apple trees ...
- UVALive 4043 Ants 蚂蚁(二分图最佳完美匹配,KM算法)
题意: 有n个蚂蚁n棵树,蚂蚁与树要配对,在配对成功的一对之间连一条线段,要求所有线段不能相交.按顺序输出蚂蚁所匹配的树. 思路: 这个题目真是技巧啊,不能用贪心来为每个蚂蚁选择最近的树,这样很可能是 ...
- POJ3565带权匹配——km算法
题目:http://poj.org/problem?id=3565 神奇结论:当总边权最小时,任意两条边不相交! 转化为求二分图带权最小匹配. 可以用费用流做.但这里学一下km算法. https:// ...
- 训练指南 UVALive - 4043(二分图匹配 + KM算法)
layout: post title: 训练指南 UVALive - 4043(二分图匹配 + KM算法) author: "luowentaoaa" catalog: true ...
- POJ3565 Ants 和 POJ2195 Going Home
Ants Language:Default Ants Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 7975 Accepted: ...
- 匈牙利算法与KM算法
匈牙利算法 var i,j,k,l,n,m,v,mm,ans:longint; a:..,..]of longint; p,f:..]of longint; function xyl(x,y:long ...
- 【HDU2255】奔小康赚大钱-KM算法
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Problem Description ...
随机推荐
- SQL 关于apply的两种形式cross apply 和 outer apply, with cube 、with rollup 和 grouping
1). apply有两种形式: cross apply 和 outer apply先看看语法: <left_table_expression> {cross|outer} apply &l ...
- C# DataTable Operations
DataTable详解 https://www.cnblogs.com/Sandon/p/5175829.html 怎样删除一行 https://www.cnblogs.com/jhxk/articl ...
- IntelliJ IDEA 学习(三):IntelliJ IDEA 快捷键、配置优化
一.两种方式可以设置快捷键: 1)setting -> keymap 想找到有关Idea工具的菜单或其他功能的话,可以再这里找到对应的快捷键 2)setting -> Editor - ...
- [转]sql:除非另外还指定了 TOP 或 FOR XML,否则,ORDER BY 子句在视图、内联函数、派生表、子查询
执行sql语句: select * from ( select * from tab where ID>20 order by userID desc ) as a order by date ...
- CYQ学习主要摘要3
1:MAction:增加ResetTable功能 增加ResetTable功能:减少New MAction的个数2:MAction:增加在Update/Insert/Fill/ResetTable失 ...
- js 树菜单 ztree
http://www.ztree.me/v3/api.php 官网 api js /** <div id="menuContent" class="menuCont ...
- FreeRTOSConfig 配置文件详解
以下转载自安富莱电子: http://forum.armfly.com/forum.php 本章节为大家讲解 FreeRTOS 的配置文件 FreeRTOSConfig.h 中每个选项的作用.初学的话 ...
- with as 和update ,Delete,insert
这个SQL写了很久的时间,感觉pgSQL的很是麻烦. with as 先命名一个表出来,就可以当成临时表用. WITH tmp AS ( SELECT MAX(mgi.inner_cd) AS inn ...
- sama5d3 环境检测 gpio--yk测试
说明: gpio的MAP关系 yk0--pioA7 yk1--pioA5 yk2--pioA9 yk3--pioA3 yk4--pioA1 yk5--pioA8 (端子从左--& ...
- JVM中的STW和CMS
Java中Stop-The-World机制简称STW,是在执行垃圾收集算法时,Java应用程序的其他所有线程都被挂起(除了垃圾收集帮助器之外).Java中一种全局暂停现象,全局停顿,所有Java代码停 ...