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>
//#inc