1.题目描述:点击打开链接

2.解题思路:本题利用KM算法解决。可以构造一个二分图,把每个白点对应成X结点,黑点对应成Y结点,每个黑点和每个白点相连,权值等于欧几里得距离的负值。然后用KM算法求二分图最佳完美匹配即可解决本题。为什么可以这样做呢?假设在求解最佳完美匹配时候,线段a1-b1和线段a2-b2相交了,那么一定有dist(a1,b1)+dist(a2,b2)>dist(a1,b2)+dist(a2,b1)。因此,如果把这两条线段改成a1-b2,a2-b1后长度会减小(在本题的代码中,由于是负数,因此相当于权值增大),与“最佳”相互矛盾。换句话说,求解最佳完美匹配的过程中,不会出现线段相交的情况。

3.代码:

#include<iostream>
#include<algorithm>
#include<cassert>
#include<string>
#include<sstream>
#include<set>
#include<bitset>
#include<vector>
#include<stack>
#include<map>
#include<queue>
#include<deque>
#include<cstdlib>
#include<cstdio>
#include<cstring>
//#include<cmath>
#include<ctime>
#include<cctype>
#include<list>
#include<complex>
#include<functional>
using namespace std;#define me(s) memset(s,0,sizeof(s))
#define rep(i,n) for(int i=0;i<(n);i++)
#define pb push_back
typedef long long ll;
typedef pair <int,int> P;const int maxn=100+10;
const double INF=1e30;int n;
double W[maxn][maxn];
double Lx[maxn],Ly[maxn];
int Left[maxn];bool S[maxn],T[maxn];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)){if(kase++)puts("");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++)for(int j=1;j<=n;j++){double dx=(double)(x1[i]-x2[j]);double dy=(double)(y1[i]-y2[j]);W[j][i]=-sqrt(dx*dx+dy*dy); //权值是欧几里得距离的负值}KM();for(int i=1;i<=n;i++)printf("%d\n",Left[i]);}
}

例题5.23 蚂蚁 LA4043相关推荐

  1. 三年前端,面试思考(头条蚂蚁美团offer)

    小鱼儿本人985本科,软件工程专业,前端. 工作三年半,第一家创业公司,半年. 第二家前端技术不错的公司,两年半. 第三家,个人创业半年. 可以看出,我是个很喜欢折腾的人,大学期间也做过很多项目,非常 ...

  2. 微软、百度、腾讯、阿里、蚂蚁金服:实习面经

    1.百度前端 一面: promise async/await promise封装ajax 三栏布局 一个元素和父元素高度一样 选择器 说css结果 一个数组,在第一次出现位置标次数,后边的标0 二面 ...

  3. 2021哔哩哔哩1024程序员节日第一弹:算法与安全

    前两天参加了哔哩哔哩1024程序员节活动,看到了几个有意思的算法题,分享一下.(文末有全部答案) 文章目录 1.蚂蚁爬木杆 2.爬台阶 3.中位数 4.香钟 5.吃烤鸭 6.报30 7.老鼠吃毒药 1 ...

  4. 蚁群算法求解TSP问题

    蚁群算法求解TSP问题 蚁群算法求解TSP问题 蚁群算法求解TSP问题 旅行商问题,即TSP问题(Traveling Salesman Problem)又译为旅行推销员问题.货郎担问题,是数学领域中著 ...

  5. LeetCode-数据结构

    文章目录 应做未做 未弄懂 经典题+易错题 一.长见识的方法 二.杂七杂八积累 三.面试常考题目索引 java刷题常用 树 数组 摩尔投票算法 堆 数据流的中位数 排序 四.基础知识总结 4.x 数组 ...

  6. 广东理工职业学院第三届程序设计大赛试题及参考答案

    广东理工职业学院 第三届程序设计大赛试题 2011-6-9 学号:        姓名:           班级:              成绩: 注意事项: 为保证竞赛顺利进行,正式答题之前,请 ...

  7. 找实习经历分享(一)

    100道Java高频面试题 这就是我面了42场得到的方法论! 程序员考公指南 实习还是尽量想找大厂,找一个朋友内推字节跳动,但是简历关没有过,她建议我修改简历,投中厂. 我是在BOSS直聘上面投递的简 ...

  8. 高等数学(上) —— 一元积分学

    文章目录 Ch4.不定积分 (一) 不定积分的概念与性质 1.原函数 F ( x ) F(x) F(x) 原函数存在定理 2.不定积分 ∫ f ( x ) d x \int f(x)dx ∫f(x)d ...

  9. 四川大学软件学院|系统级编程期末复习

    概述 选择题 50 分(原题率 80%):http://tieba.baidu.com/p/1250021454?&share=9105&fr=sharewise&unique ...

最新文章

  1. databinding 入门 知识 给TextView 赋值
  2. 区块链基础知识系列第5课 Hyperledger fabric1.0网络中transaction产生以及流转过程
  3. 一个使用Java BlockingQueue实现的生产者和消费者
  4. 企业信息化投入中咨询服务_全过程工程咨询服务核心价值是什么
  5. 一维数组和二维数组创建,输出,Arrays.fill()替换
  6. spring - ioc和aop
  7. python只想调用函数不想执行.py
  8. 23种设计模式总结+清晰图解(必收藏)
  9. echars中国地图,省份名字居中
  10. 简约商业计划书PPT模板
  11. 求小于100的所有合数 python_python100例
  12. 【基于Pytorch的手写汉字识别】
  13. 关于 np.arccos/arcsin 计算之前需要必须要 np.clip 的那件小事儿
  14. 慎用!3个容易被打的Python恶搞脚本!
  15. 网线/双绞线相关知识
  16. easyui filebox文件大小校验
  17. 梯形公式和辛普森的Matlab
  18. mysql 合并两个update_如何将多条update语句合并为一条
  19. excel转html乱码,EXCEL表格中数字乱码是什么原因?
  20. 【笔记】SSH服务:基本概述、相关命令“ssh、scp、sftp”、验证方式、场景实践、安全优化

热门文章

  1. 数字图像处理实验(七)| 形态学图像处理{生成结构元素strel、腐蚀运算imerode、膨胀运算imdilate、开运算imopen、闭运算imclose}(附代码和实验截图、汉字视力表项目、总结)
  2. 5G网络普及提速,你身边的这些行业已经站上了风口
  3. 一步一步做高性能服务器(C++) -- Day 0
  4. 2022-2023年度江苏省职业院校技能大赛“网络安全”赛项中职组圆满成功
  5. Cyclen-PEG-Bodipy;大环配体-聚乙二醇-氟化硼二吡咯;大环配体-PEG-Bodipy
  6. 4个设计APP产品不得不知道的心理学原理
  7. 窗帘轨道怎么安装?方法有哪些?-江南爱窗帘十大品牌
  8. 游戏制作策划人员指南
  9. 自然语言处理实战:机器学习常见工具与技术
  10. 手把手教你如何用python制作自动翻译程序