直接套用KM即可解决 要注意距离采用的是double 要在match函数中修改判断条件

#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
//#include<map>
#include<queue>
#include<stack>
#include<cmath>
#include<vector>
#define inf 0x3f3f3f3f
#define Inf 0x3FFFFFFFFFFFFFFFLL
#define pi acos(-1.0)
#define ls (rt<<1)
#define rs ((rt<<1)|1)
#define mid ((l+r)>>1)
using namespace std;
const int maxn = 110;
const double eps = 1e-10;
double w[maxn][maxn];
int n;
double lx[maxn],ly[maxn];   //顶标
int lf[maxn];
bool s[maxn],t[maxn];     //左右第i点是否标记
bool match(int i)
{s[i]=true;for(int j=1;j<=n;++j)if((fabs(lx[i]+ly[j]-w[i][j])<eps)&&!t[j]){t[j]=true;if(!lf[j]||match(lf[j])){lf[j]=i;return true;}}return false;}
void update()
{double  a=1<<30;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++) lf[i]=lx[i]=ly[i]=0;for(int i=1;i<=n;++i){while(1){for(int j=1;j<=n;++j) s[j]=t[j]=0;if(match(i))break;else update();}}
}
double dist(double x1,double y1,double x2,double y2)
{return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
}
int main()
{double  ax[maxn],ay[maxn],bx[maxn],by[maxn];while(~scanf("%d",&n)){//      memset(w,0,sizeof w );for(int i=1;i<=n;i++){scanf("%lf%lf",&ax[i],&ay[i]);}   //antfor(int i=1;i<=n;++i){scanf("%lf%lf",&bx[i],&by[i]);}    //treefor(int i=1;i<=n;i++){for(int j=1;j<=n;j++){w[i][j]=-dist(bx[i],by[i],ax[j],ay[j]);}}km();for(int i=1;i<=n;++i){printf("%d\n",lf[i]);}}
}

LA4043 KM算法相关推荐

  1. 2019 ICPC Asia Nanjing Regional J.Spy(KM算法O(n^3)板子题)

    整理的算法模板合集: ACM模板 前面好几段又在讲故事- 题目大意: a[i]表示对手的每个队伍战斗力 p[i]表示打败对手后获得的分数 b[i]表示我方第一种人的战斗力 c[i]表示我方第二种人的战 ...

  2. 【算法笔记】二分图最大权匹配 - KM算法(dfs版O(n4) + bfs版O(n3))

    整理的算法模板合集: ACM模板 匈牙利算法又称为 KM 算法,可以在 O(n3)O(n^3)O(n3) 时间内求出二分图的 最大权完美匹配 . 考虑到二分图中两个集合中的点并不总是相同,为了能应用 ...

  3. poj 3565 uva 1411 Ants KM算法求最小权

    由于涉及到实数,一定,一定不能直接等于,一定,一定加一个误差<0.00001,坑死了-- 有两种事物,不难想到用二分图.这里涉及到一个有趣的问题,这个二分图的完美匹配的最小权值和就是答案.为啥呢 ...

  4. hdu 2255 奔小康赚大钱--KM算法模板

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2255 题意:有N个人跟N个房子,每个人跟房子都有一定的距离,现在要让这N个人全部回到N个房子里面去,要 ...

  5. 判别两棵树是否相等 设计算法_从匈牙利算法到KM算法

    网上搜了好多KM算法的文章,都写得云里雾里.看了半天之后,我终于看懂了.其实KM算法非常简单,只要会匈牙利算法了,一下就能看懂KM算法. 如果大家对自己的匈牙利算法不够自信的话,可以先复习一下,放上我 ...

  6. UVA 11383 Golden Tiger Claw 金虎爪(KM算法)

    题意: 给一个n*n的矩阵,每个格子中有正整数w[i][j],试为每行和每列分别确定一个数字row[i]和col[i],使得任意格子w[i][j]<=row[i]+col[j]恒成立.先输row ...

  7. HDU 1853 HDU 3488【有向环最小权值覆盖问题 】带权二分图匹配 KM算法

    HDU 1853 & HDU 3488[有向环最小权值覆盖问题 ]最小费用最大流 In the kingdom of Henryy, there are N (2 <= N <= ...

  8. 二分图最大权匹配 KM算法

    KM算法的正确性基于以下定理: 若由二分图中所有满足A[i]+B[i]=w[i][j]的边C(i,j)构成的子图(即相等子图)有完备匹配,那么这个完备匹配就是二分图的最大权匹配 基本概念 1.完备匹配 ...

  9. HDU 2255 奔小康赚大钱 带权二分图匹配 KM算法

    奔小康赚大钱 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Sub ...

最新文章

  1. 浅谈MySQL中utf8和utf8mb4的区别
  2. 自定义报错返回_Keras编写自定义层--以GroupNormalization为例
  3. Linux ls -l文件列表权限详解
  4. 藏青色在html页面怎么写,Html页面支持暗黑模式的实现
  5. 端云互联 3.0 击破云原生开发的痛点
  6. python绘制正态分布函数_学好正态分布有多重要?
  7. 《我也能做CTO之.程序员职业规划》 水准之上,期望以下
  8. 04_使用Influxdb自带函数查询
  9. 【翻译自mos文章】使用aum( Automatic Undo Management) 时遇到 ORA-01555错误--- 原因和解决方式。...
  10. 你真的了解UIButton、UILabel 吗?
  11. C语言程序设计如何输入两行,求c语言高手编一个程序,题目要求如下: 输入有多组数据。 每组数据两行。 第一行包含一个正整数n(...
  12. 小代码编写神器:LINQPad 使用入门
  13. mysql权限查看_教您如何查看MySQL用户权限
  14. About_CSDN
  15. ppt背景图片php,求ppt背景,ppt背景图片,漂亮一些的。
  16. armbian 斐讯n1_斐讯N1刷入Armbian(linux)或者电视盒子系统
  17. Ubuntu系统下把视频转换成gif图片
  18. A ConneR and the A.R.C. Markland-N
  19. zemax设计35mm镜头_ZEMAX基础实例 - 变焦镜头设计
  20. 哈尔滨计算机职业学校赵梓琦,哈尔滨赛区复选晋级名单

热门文章

  1. 核心价值观与企业文化管理实践---基于华为的企业文化的管理实践-林 安老师
  2. Android Framework学习的基础概论
  3. mSystems | 中农汪杰组揭示影响土壤“塑料际”微生物群落的机制
  4. 唯品会获得vip商品详情 API 返回值说明
  5. Java兔子生兔子问题
  6. Type-C快充诱电方案
  7. view-design 组件库表格筛选条件联动保留前面筛选条件的高亮状态
  8. 震惊!为了欣赏后宫的3000佳丽,我竟然用Python做出了一面墙?
  9. 真正的程序员职场高手,都是怎么沟通的?
  10. 小岛战争1.0.4正式版无敌版