Ants UVA - 1411(km板题竟然让我换了个板子)
题意:
给出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板题竟然让我换了个板子)的更多相关文章
- 奔小康赚大钱 HDU - 2255(最大权值匹配 KM板题)
奔小康赚大钱 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Subm ...
- uva 1411 Ants (权值和最小的完美匹配---KM算法)
uva 1411 Ants Description Young naturalist Bill studies ants in school. His ants feed on plant-louse ...
- 【UVA 1411】 Ants (KM)
Young naturalist Bill studies ants in school. His ants feed onplant-louses that live on apple trees. ...
- UVA 1411 - Ants(二分图完美匹配)
UVA 1411 - Ants 题目链接 题意:给定一些黑点白点,要求一个黑点连接一个白点,而且全部线段都不相交 思路:二分图完美匹配,权值存负的欧几里得距离,这种话,相交肯定比不相交权值小,所以做一 ...
- UVa 489 HangmanJudge --- 水题
UVa 489 题目大意:计算机给定一个单词让你猜,你猜一个字母,若单词中存在你猜测的字母,则会显示出来,否则算出错, 你最多只能出错7次(第6次错还能继续猜,第7次错就算你失败),另注意猜一个已经猜 ...
- UVa 1585 Score --- 水题
题目大意:给出一个由O和X组成的串(长度为1-80),统计得分. 每个O的分数为目前连续出现的O的个数,例如,OOXXOXXOOO的得分为1+2+0+0+1+0+0+1+2+3 解题思路:用一个变量t ...
- 【凸包板题】Gym - 101484E E. Double Fence
http://codeforces.com/gym/101484/problem/E 题解 凸包板题 #define _CRT_SECURE_NO_WARNINGS #include<cmath ...
- Oil Skimming HDU - 4185(匹配板题)
Oil Skimming Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tota ...
- Luogu P3690【模板】Link Cut Tree (LCT板题)
省选前刷道LCT板题(话说之前没做这道题-) CODE #include<bits/stdc++.h> using namespace std; inline void read(int ...
随机推荐
- Nginx入门篇(一)之Nginx介绍
1.简介 Nginx ("engine x") 是一个高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP 服务器. Nginx 是由 Igor Sysoe ...
- 【xshell属性设置】如何修改xshell字体大小
1.周末在家,想搞一下学习,于是远程公司的电脑(我的移动硬盘在公司,里面有虚拟机及测试环境) 发现xshell界面字体太小,不方便看,于是研究了一下如何来设置xshell 的字体大小 2.点击左上角的 ...
- 记Thinkpad的一次扩容升级经历
俗话说:" 工欲善其事,必先利其器" 阅读目录: 背景 目标 准备 友情提示 制作引导盘 分区及备份 拆机装盘 重装系统 写在结束的 参考资料 背景: 作为一个近六年的IT从业Co ...
- C#与mongoDB初始环境搭建
mongoDB官网https://www.mongodb.com/ mongoDB默认安装路径(Windows x64平台) C:\Program Files\MongoDB\Server\3.4\b ...
- mysql增删改查、连表查询、常用操作
一.建表 1.最简单的建表CREATE TABLE user(id int,name char(20),age int); 2.带主键带注释和默认值创建表CREATE TABLE user(id I ...
- 【Java】 秒转时分秒天
总有时候会有些需求, 需要用到秒, 比如 JedisCluster 设置过期时间 现在有一个需求是 : 查询接口的缓存设置有效期为:1天+随机时间 基本可以按以下来做: package com.lwc ...
- K-means算法实现
目录 K-means K-means x = xlsread("D:\MatlabData\西瓜数据集.xlsx"); m = length(x); [Idx,C]=kmeans( ...
- fetch上传文件报错的问题(multipart: NextPart: EOF)
技术栈 后台: gin(golang) 前端: react+antd+dva 问题 前端这边使用fetch发送http请求的时候,后端解析formData报错: multipart: NextPart ...
- day03 作业 and 周末作业
请输出 name 变量对应的值中 "e" 所在索引位置? # name = "leX leNb"# num = 0# while num < len(na ...
- Paper Reading - Convolutional Sequence to Sequence Learning ( CoRR 2017 ) ★
Link of the Paper: https://arxiv.org/abs/1705.03122 Motivation: Compared to recurrent layers, convol ...