题意:

  给出n个白点和n个黑点的坐标,要求用n条不相交的线段把它们连接起来,其中每条线段恰好连接一个白点和一个黑点,每个点恰好连接到一条线段

解析:

  带入负的欧几里得距离求就好了

  假设a1-b1 与 a2-b2相交 则dis(a1, b1) + dis(a2, b2) 一定大于 dis(a1, b2) + dis(a2, b1)

  四边形的对角线一定大于两条对边。。。

  所以。。边的权值取负的欧几里得距离。。来一次km就好了   km是求最大  而负的最大 对应整的最小 而整的最小 又能对应不相交

#include <iostream>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <queue>
#include <cmath>
#include <algorithm>
#include <vector>
#define mem(a, b) memset(a, b, sizeof(a))
using namespace std;
const int maxn = , INF = 0x7fffffff;
const double eps = 1e-;
int usedx[maxn], usedy[maxn], cx[maxn], cy[maxn];
int nx, ny, n, max_value;
double minn;
double w[maxn][maxn], bx[maxn], by[maxn], slack[maxn];
struct node
{
double x, y;
}Node[maxn], Edge[maxn]; int dcmp(double x)
{
if(fabs(x) < eps) return ; else return x < ? - : ;
} bool dfs(int u)
{
usedx[u] = ;
for(int i=; i<=ny; i++)
{
if(usedy[i] == )
{
double t = bx[u] + by[i] - w[u][i];
if(dcmp(t) == )
{
usedy[i] = ;
if(cy[i] == - || dfs(cy[i]))
{
cy[i] = u;
cx[u] = i;
return true;
}
}
else
slack[i] = min(slack[i], t);
}
}
return false;
} void km()
{
mem(cx, -);
mem(cy, -);
mem(by, );
for(int i=; i<=n; i++)
{
bx[i] = -INF;
for(int j=; j<=n; j++)
bx[i] = max(bx[i], w[i][j]);
}
for(int i=; i<=n; i++)
{
for(int j=; j<=n; j++)
slack[j] = INF;
while()
{
mem(usedx, );
mem(usedy, );
if(dfs(i)) break;
double d = INF;
for(int j=; j<=n; j++)
if(!usedy[j])
d = min(d, slack[j]);
for(int j=; j<=n; j++)
if(usedx[j] != ) bx[j] -= d;
for(int j=; j<=n; j++)
if(usedy[j] != ) by[j] += d;
else slack[j] -= d;
}
}
} int main()
{
bool flag = true;
while(~scanf("%d",&n))
{
if(true) flag = false;
else printf("\n");
for(int i=; i<=n; i++)
{
scanf("%lf%lf", &Node[i].x, &Node[i].y);
}
for(int i=; i<=n; i++)
scanf("%lf%lf", &Edge[i].x, &Edge[i].y);
for(int i=; i<=n; i++)
for(int j=; j<=n; j++)
w[i][j] = -sqrt((Edge[i].x - Node[j].x)*(Edge[i].x - Node[j].x) + (Edge[i].y - Node[j].y)*(Edge[i].y - Node[j].y)); nx = ny = n;
km();
for(int i=; i<=n; i++)
printf("%d\n", cy[i]); }
return ;
}

Ants UVA - 1411(km板题竟然让我换了个板子)的更多相关文章

  1. 奔小康赚大钱 HDU - 2255(最大权值匹配 KM板题)

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

  2. uva 1411 Ants (权值和最小的完美匹配---KM算法)

    uva 1411 Ants Description Young naturalist Bill studies ants in school. His ants feed on plant-louse ...

  3. 【UVA 1411】 Ants (KM)

    Young naturalist Bill studies ants in school. His ants feed onplant-louses that live on apple trees. ...

  4. UVA 1411 - Ants(二分图完美匹配)

    UVA 1411 - Ants 题目链接 题意:给定一些黑点白点,要求一个黑点连接一个白点,而且全部线段都不相交 思路:二分图完美匹配,权值存负的欧几里得距离,这种话,相交肯定比不相交权值小,所以做一 ...

  5. UVa 489 HangmanJudge --- 水题

    UVa 489 题目大意:计算机给定一个单词让你猜,你猜一个字母,若单词中存在你猜测的字母,则会显示出来,否则算出错, 你最多只能出错7次(第6次错还能继续猜,第7次错就算你失败),另注意猜一个已经猜 ...

  6. UVa 1585 Score --- 水题

    题目大意:给出一个由O和X组成的串(长度为1-80),统计得分. 每个O的分数为目前连续出现的O的个数,例如,OOXXOXXOOO的得分为1+2+0+0+1+0+0+1+2+3 解题思路:用一个变量t ...

  7. 【凸包板题】Gym - 101484E E. Double Fence

    http://codeforces.com/gym/101484/problem/E 题解 凸包板题 #define _CRT_SECURE_NO_WARNINGS #include<cmath ...

  8. Oil Skimming HDU - 4185(匹配板题)

    Oil Skimming Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Tota ...

  9. Luogu P3690【模板】Link Cut Tree (LCT板题)

    省选前刷道LCT板题(话说之前没做这道题-) CODE #include<bits/stdc++.h> using namespace std; inline void read(int ...

随机推荐

  1. Spark实施备忘

    AttributeError: 'SparkConf' object has no attribute '_get_object_id' 初始化SparkContext时出现这种错误是因为把Spark ...

  2. Zigbee系列(end device)

    End device设备分为睡眠和非睡眠两种(RxOnWhenIdle标记不同). 入网时的association请求,会使用这个标记. 共同特性 子节点多次发送数据失败(无回应),发送孤点扫描(re ...

  3. Qt-QML-电子罗盘

    使用QML中的Canvas实现电子罗盘绘制,效果图如下 一个简单的电子罗盘,红色N极.其中中间飞机表示当前的指向, 还是比较简单的,直接上代码吧 /* 作者:张建伟 时间:2018年4月27日 简述: ...

  4. Openwrt之移动硬盘ext3/ext4格式化工具

    在给openwrt挂载移动硬盘的时候,最好是ext3/ext4方式,但在windows下苦于无法找到合适的工具进行格式化. 踅摸了半天,终于找到了它:MiniTool Partion  Wizard ...

  5. html5shiv 是一个针对 IE 浏览器的 HTML5 JavaScript 补丁,目的是让 IE 识别并支持 HTML5 元素。

    html5shiv 是一个针对 IE 浏览器的 HTML5 JavaScript 补丁,目的是让 IE 识别并支持 HTML5 元素. 各版本html5shiv.js CDN网址:https://ww ...

  6. Centos7部署Kubernetes集群(单工作节点)+配置dashboard可视化UI

    目标:docker+kubernetes+cadvosor+dashboard 一:物理硬件 两台虚拟机(centos7):一台做为主节点(master),一台做为工作节点(node) [root@M ...

  7. 高可用Kubernetes集群-4. kubectl客户端工具

    六.部署kubectl客户端工具 1. 下载 [root@kubenode1 ~]# cd /usr/local/src/ [root@kubenode1 src]# wget https://sto ...

  8. 基于zookeeper+mesos+marathon的docker集群管理平台

    参考文档: mesos:http://mesos.apache.org/ mesosphere社区版:https://github.com/mesosphere/open-docs mesospher ...

  9. Altera FPGA AS,PS,Jtag配置模式区别

    Altera FPGA  AS,PS,Jtag配置模式区别 FPGA器件有三类配置下载方式:主动配置方式(AS)和被动配置方式(PS)和最常用的(JTAG)配置方式. AS模式(active seri ...

  10. Machine Learning方法总结

    Kmeans——不断松弛(?我的理解)模拟,将点集分成几堆的算法(堆数需要自己定). 局部加权回归(LWR)——非参数学习算法,不用担心自变量幂次选择.(因此当二次欠拟合, 三次过拟合的时候不妨尝试这 ...