KM 最大权匹配 UVA 1411/POJ 3565
#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的更多相关文章
- URAL 1076 Trash Trash(最大权匹配)
		Trash Time limit: 1.0 secondMemory limit: 64 MB You were just hired as CEO of the local junkyard.One ... 
- uva 1411 Ants (权值和最小的完美匹配---KM算法)
		uva 1411 Ants Description Young naturalist Bill studies ants in school. His ants feed on plant-louse ... 
- UVA 1411 - Ants(二分图完美匹配)
		UVA 1411 - Ants 题目链接 题意:给定一些黑点白点,要求一个黑点连接一个白点,而且全部线段都不相交 思路:二分图完美匹配,权值存负的欧几里得距离,这种话,相交肯定比不相交权值小,所以做一 ... 
- HDU(2255),KM算法,最大权匹配
		题目链接 奔小康赚大钱 Time Limit: 1000/1000MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Su ... 
- 二分图 最大权匹配 km算法
		这个算法的本质还是不断的找增广路: KM算法的正确性基于以下定理:若由二分图中所有满足A[i]+B[j]=w[i,j]的边(i,j)构成的子图(称做相等子图)有完备匹配,那么这个完备匹配就是二分图的最 ... 
- hdu 2255 奔小康赚大钱 最大权匹配KM
		题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2255 传说在遥远的地方有一个非常富裕的村落,有一天,村长决定进行制度改革:重新分配房子.这可是一件大事 ... 
- 【UVA 1411】 Ants (KM)
		Young naturalist Bill studies ants in school. His ants feed onplant-louses that live on apple trees. ... 
- hdu2255 奔小康赚大钱,最大权匹配,KM算法
		点击打开链接 最大权匹配 KM算法 算法步骤: 设顶点Xi的顶标为a[i],顶点Yi的顶标为b[i] ⅰ.初始时.a[i]为与Xi相关联的边的最大权值.b[j]=0.保证a[i]+b[j]>=w ... 
- Hdu2255 奔小康赚大钱(二分图最大权匹配KM算法)
		奔小康赚大钱 Problem Description 传说在遥远的地方有一个非常富裕的村落,有一天,村长决定进行制度改革:重新分配房子. 这可是一件大事,关系到人民的住房问题啊.村里共有n间房间,刚好 ... 
随机推荐
- Spring Security 官网文档学习
			文章目录 通过`maven`向普通的`WEB`项目中引入`spring security` 配置 `spring security` `configure(HttpSecurity)` 方法 自定义U ... 
- JDBC预编译statement(preparedstatement)和statement的比较、execute与executeUpdate的区别
			和 Statement一样,PreparedStatement也是用来执行sql语句的与创建Statement不同的是,需要根据sql语句创建PreparedStatement除此之外,还能够通过设置 ... 
- 剑指offer48:不用加减乘除做加法
			1 题目描述 写一个函数,求两个整数之和,要求在函数体内不得使用+.-.*./四则运算符号. 2 思路和方法 位运算符:两个数异或(^)[1^0=1, 1^1=0, 0^0=0, 0^1=1, 5^5 ... 
- Python-20-异常处理
			一.什么是异常 异常就是程序运行时发生错误的信号(在程序出现错误时,则会产生一个异常,若程序没有处理它,则会抛出该异常,程序的运行也随之终止) 常用异常: AttributeError 试图访问一个对 ... 
- Advanced REST Client 的安装
			1.解压Advanced-REST-client_v3.1.9.zip到当前文件夹,得到Advanced-REST-client_v3.1.9目录 2.在Chrome浏览器中打开:chrom ... 
- 海量数据处理的 Top K 相关问题
			Top-k的最小堆解决方法 问题描述:有N(N>>10000)个整数,求出其中的前K个最大的数.(称作Top k或者Top 10) 问题分析:由于(1)输入的大量数据:(2)只要前K个,对 ... 
- 【转载】Sqlserver使用Right函数从最右边向前截取固定长度字符串
			在SQL语句查询过程中,Sqlserver支持使用LEFT().RIGHT().SUBSTRING()等几个函数对字符串进行截取操作,其中Left函数表示从开始字符向后截取多少个字符,Right函数表 ... 
- C++实现企业链表(单向链表的另外一种实现方式)
			LinkList.h #include <windows.h> #include <stdio.h> // 链表小结点 typedef struct LINKNODE { LI ... 
- 关于lock和synchronized的选择
			这里不介绍具体用法,介绍lock和synchronized的不同从而做出选择 1.lock是一个接口,而synchronized是java中的一个关键字,synchronized是内置的语言实现. 2 ... 
- ORA-00001:unique constraint violated解决
			转自:https://www.2cto.com/database/201211/172340.html ORA-00001:unique constraint violated解决 今天往数据库中插入 ... 
