#include <bits/stdc++.h>
using namespace std; inline void read(int &num)
{
char ch; num = 0; int flag = 1;
while((ch=getchar()) < '0' || ch > '9')if(ch == '-') flag = -flag;
while(ch >= '0' && ch <= '9') num = num*10 + ch-'0', ch = getchar();
num *= flag;
}
const int MAXN = 105;
int n, p[MAXN][2]; int pre[MAXN], cy[MAXN];
double slk[MAXN],dbx[MAXN], dby[MAXN], w[MAXN][MAXN];
bool vis[MAXN];
void bfs(int now)
{
memset(vis, 0, sizeof vis);
memset(slk, 127, sizeof slk);
int x, y = 0, Minloc; cy[y] = now;
do {
x = cy[y]; Minloc = 0; vis[y] = 1;
for(int i = 1; i <= n; i++) if(!vis[i])
{
if(dbx[x]+dby[i]-w[x][i] < slk[i]) slk[i] = dbx[x]+dby[i]-w[x][i], pre[i] = y;
if(slk[i] < slk[Minloc]) Minloc = i;
}
double inc = slk[Minloc]; //注意不要定义成int
for(int i = 0; i <= n; i++)
if(vis[i]) dbx[cy[i]] -= inc, dby[i] += inc;
else slk[i] -= inc;
y = Minloc;
}while(~cy[y]);
while(y) cy[y] = cy[pre[y]], y = pre[y];
} void KM()
{
memset(cy, -1, sizeof cy);
for(int i = 1; i <= n; i++) bfs(i);
for(int i = 1; i <= n; i++) printf("%d\n", cy[i]);
} inline double dist(int a1, int b1, int a2, int b2)
{
return sqrt(1.0*(a1-a2)*(a1-a2) + (b1-b2)*(b1-b2));
} int main ()
{
while(scanf("%d", &n) != EOF)
{
for(int i = 1; i <= n; i++) read(p[i][0]), read(p[i][1]);
for(int i = 1, x, y; i <= n; i++)
{
read(x), read(y);
for(int j = 1; j <= n; j++)
w[i][j] = -dist(x, y, p[j][0], p[j][1]);
}
KM();
}
}

KM 最大权匹配 UVA 1411/POJ 3565的更多相关文章

  1. URAL 1076 Trash Trash(最大权匹配)

    Trash Time limit: 1.0 secondMemory limit: 64 MB You were just hired as CEO of the local junkyard.One ...

  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(二分图完美匹配)

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

  4. HDU(2255),KM算法,最大权匹配

    题目链接 奔小康赚大钱 Time Limit: 1000/1000MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Su ...

  5. 二分图 最大权匹配 km算法

    这个算法的本质还是不断的找增广路: KM算法的正确性基于以下定理:若由二分图中所有满足A[i]+B[j]=w[i,j]的边(i,j)构成的子图(称做相等子图)有完备匹配,那么这个完备匹配就是二分图的最 ...

  6. hdu 2255 奔小康赚大钱 最大权匹配KM

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2255 传说在遥远的地方有一个非常富裕的村落,有一天,村长决定进行制度改革:重新分配房子.这可是一件大事 ...

  7. 【UVA 1411】 Ants (KM)

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

  8. hdu2255 奔小康赚大钱,最大权匹配,KM算法

    点击打开链接 最大权匹配 KM算法 算法步骤: 设顶点Xi的顶标为a[i],顶点Yi的顶标为b[i] ⅰ.初始时.a[i]为与Xi相关联的边的最大权值.b[j]=0.保证a[i]+b[j]>=w ...

  9. Hdu2255 奔小康赚大钱(二分图最大权匹配KM算法)

    奔小康赚大钱 Problem Description 传说在遥远的地方有一个非常富裕的村落,有一天,村长决定进行制度改革:重新分配房子. 这可是一件大事,关系到人民的住房问题啊.村里共有n间房间,刚好 ...

随机推荐

  1. C++拾忆

    1.引用 1.建立引用的时候,必须初始化,引用一旦初始化,就和一个对象绑定,不能再修改为其他对象的引用 2.对引用取地址,和对原始对象取地址,是同一个地址 3.不能用做引用的:void.数组 2.内联 ...

  2. Redis搭建Windows平台

    安装程序下载 从官网下载安装程序. https://redis.io/download https://github.com/MicrosoftArchive/redis/releases 新地址:h ...

  3. ~postman全局变量与环境变量介绍

    postman官方文档:https://learning.getpostman.com/docs/postman/scripts/test_examples/ 一.环境变量 实例:将URL作为环境变量 ...

  4. hadoop 空间配置

    hadoop-------------- 分布式计算框架. common // hdfs //存储 mapreduce //MR,编程模型. yarn //资源调度. 集群部署----------- ...

  5. SAS学习笔记51 SAS数据集

    结构 SAS数据集是关系型的,包含两个部分:描述部分(变量)和数据部分(观察值) 形式 SAS系统中共有两种类型的数据集: 1.SAS 数据文件(SAS datafiles) 2.SAS 数据视窗(S ...

  6. websocket 协议简述

    WebSocket 是一种网络通信协议,RFC 6455 定义了它的通信标准,属于服务器推送技术的一种 由于 HTTP 无状态.无连接.单向通信的特性,导致 HTTP 协议无法实现服务器主动向客户端发 ...

  7. Python 操作MySQL 数据库

    Python 操作 MySQL 数据库 Python 标准数据库接口为 Python DB-API,Python DB-API为开发人员提供了数据库应用编程接口. Python 数据库接口支持非常多的 ...

  8. Angular Material 学习笔记 Chips

    依据 material guidelines, chips 可以用来做 filter https://material.io/design/components/chips.html#filter-c ...

  9. 【转载】使用Jedis操作redis

    Redis是一个开源的Key-Value数据缓存,和Memcached类似. Redis多种类型的value,包括string(字符串).list(链表).set(集合).zset(sorted se ...

  10. C# 卡控时间输入

    int hour = (int.Parse(DateTime.Now.Hour.ToString())) * 60;        int minute = int.Parse(DateTime.No ...