【POJ3565】ANTS KM算法
2024-09-27 06:17:06
【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;
}
最新文章
- mysql 列类型
- 【CodeVS 3290】【NOIP 2013】华容道
- JavaScript---Angular 和JQuery
- [转]关于int整形变量占有字节问题
- requirejs + vue 项目搭建
- input 属性
- SQLserver中小数点怎么自定义取的问题
- JavaJDBC整理
- WSGI 相关的东东(转载)
- 清理孤儿文件 clearing up outdated orphans
- Excel技巧--巧用差异化插入空行
- DNS Wildcard(DNS泛域名)
- VB6 对象库未注册问题
- C# MVC+EF—结构搭建
- winform中RichTextBox在指定光标位置插入图片
- 【jsp】详解JSP表达式语言(EL)
- Dubbo -- 系统学习 笔记 -- 示例 -- 分组聚合
- 关于如何使用Microsoft Word发博客
- sass与less
- js insertBefore
热门文章
- Linux系统里如何彻底的清空终端屏幕?
- 如果你写PHP, 请多注意自己是否有良好的习惯
- Atitit.js javascript异常处理机制与java异常的转换.js exception process Voae
- atitit.软件开发概念--过滤和投影 数据操作
- 高性能网络 | 你所不知道的TIME_WAIT和CLOSE_WAIT
- 自己定义TextView 调用ttf格式字体
- CXCommon.h工具类
- HotSpot模板解释器目标代码生成过程源码分析
- NSString (NSStringPathExtensions)
- 无需看到你的脸就能认出你——实现Beyond Frontal Faces: Improving Person Recognition Using Multiple Cues