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 ...
随机推荐
- 记录使用jQuery和Python抓取采集数据的一个实例
从现成的网站上抓取汽车品牌,型号,车系的数据库记录. 先看成果,大概4w条车款记录 一共建了四张表,分别存储品牌,车系,车型和车款 大概过程: 使用jQuery获取页面中呈现的大批内容 能通过页面一次 ...
- java阻塞队列之ArrayBlockingQueue
在Java的java.util.concurrent包中定义了和多线程并发相关的操作,有许多好用的工具类,今天就来看下阻塞队列.阻塞队列很好的解决了多线程中数据的安全传输问题,其中最典型的例子就是客园 ...
- javaweb(三十九)——数据库连接池
一.应用程序直接获取数据库连接的缺点 用户每次请求都需要向数据库获得链接,而数据库创建连接通常需要消耗相对较大的资源,创建时间也较长.假设网站一天10万访问量,数据库服务器就需要创建10万次连接,极大 ...
- python基础数据类型补充
python_day_7 一. 今日主要内容: 1. 补充基础数据类型的相关知识点 str. join() 把列表变成字符串 列表不能再循环的时候删除. 因为索引会跟着改变 字典也不能直接循环删除.把 ...
- 学习HTML 第二节.HTML头部
HTML为什么要有个头部?还不太明白,可能是一些要提前声明的东西吧.先看看有什么内容吧. 可以添加在头部区域的元素标签为: <title>标题,这个我们知道了: <meta>使 ...
- 自己做的一个固定大小对象内存池,效率大概为原始的new/delete的2倍
提升不高,不过好处是可以多次申请小对象,一次释放.(只适应于无动态申请资源的class) vs2012测试情况如下: // CHchFixLenMemPool.h #pragma once #ifnd ...
- Unity Lighting - Light Probes 光照探针(十)
Light Probes 光照探针 Only static objects are considered by Unity’s Baked or Precomputed Realtime GI s ...
- Siki_Unity_2-3_UGUI_Unity4.6 UI Beta版本入门学习(未学)
Unity 2-3 UGUI Unity4.6 UI Beta版本入门学习(未学)
- HashMap 和 HashTable 到底哪不同 ?
HashMap 和 HashTable 到底哪不同 ? 2017/05/29 | 分类: 基础技术 | 1 条评论 | 标签: HASHMAP, HASHTABLE 分享到: 原文出处: 程序员赵鑫 ...
- 【python 3.6】python读取json数据存入MySQL(一)
整体思路: 1,读取json文件 2,将数据格式化为dict,取出key,创建数据库表头 3,取出dict的value,组装成sql语句,循环执行 4,执行SQL语句 #python 3.6 # -* ...