BZOJ5154 [Tjoi2014]匹配 【KM算法 + 枚举】
题目链接
题解
先跑出一个匹配方案
然后暴力删去每对匹配再检验一下答案是否减小
使用KM算法提升速度
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<map>
#define REP(i,n) for (int i = 1; i <= (n); i++)
#define mp(a,b) make_pair<int,int>(a,b)
#define cls(s) memset(s,0,sizeof(s))
#define pr pair<int,int>
#define LL long long int
using namespace std;
const int maxn = 85,maxm = 100005,INF = 1000000000;
inline int read(){
	int out = 0,flag = 1; char c = getchar();
	while (c < 48 || c > 57){if (c == '-') flag = -1; c = getchar();}
	while (c >= 48 && c <= 57){out = (out << 3) + (out << 1) + c - 48; c = getchar();}
	return out * flag;
}
int w[maxn][maxn],expa[maxn],expb[maxn],dl[maxn],cp[maxn],visa[maxn],visb[maxn];
int n,tcp[maxn],mv,ansi;
pr ans[maxn];
bool dfs(int u){
	visa[u] = true;
	REP(i,n) if (!visb[i]){
		int kl = expa[u] + expb[i] - w[u][i];
		if (!kl){
			visb[i] = true;
			if (!cp[i] || dfs(cp[i])){
				cp[i] = u; return true;
			}
		}
		else dl[i] = min(dl[i],kl);
	}
	return false;
}
inline int work(){
	REP(i,n) expa[i] = expb[i] = cp[i] = 0;
	REP(i,n) REP(j,n) expa[i] = max(expa[i],w[i][j]);
	REP(i,n){
		REP(j,n) dl[j] = INF;
		while (true){
			REP(j,n) visa[j] = visb[j] = false;
			if (dfs(i)) break;
			int kl = INF;
			REP(j,n) if (!visb[j]) kl = min(kl,dl[j]);
			REP(j,n){
				if (visa[j]) expa[j] -= kl;
				if (visb[j]) expb[j] += kl;
				else dl[j] -= kl;
			}
		}
	}
	int re = 0;
	REP(i,n) re += w[cp[i]][i];
	return re;
}
int main(){
	n = read();
	REP(i,n) REP(j,n) w[i][j] = read();
	mv = work(); printf("%d\n",mv);
	REP(i,n) tcp[i] = cp[i];
	REP(i,n){
		int tmp = w[tcp[i]][i];
		w[tcp[i]][i] = 0;
		if (work() < mv) ans[++ansi] = mp(tcp[i],i);
		w[tcp[i]][i] = tmp;
	}
	sort(ans + 1,ans + 1 + ansi);
	REP(i,ansi) printf("%d %d\n",ans[i].first,ans[i].second);
	return 0;
}
BZOJ5154 [Tjoi2014]匹配 【KM算法 + 枚举】的更多相关文章
- 【HDU 2255】奔小康赚大钱 (最佳二分匹配KM算法)
		奔小康赚大钱 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Subm ... 
- 训练指南 UVALive - 4043(二分图匹配 + KM算法)
		layout: post title: 训练指南 UVALive - 4043(二分图匹配 + KM算法) author: "luowentaoaa" catalog: true ... 
- 二分图最大权匹配——KM算法
		前言 这东西虽然我早就学过了,但是最近才发现我以前学的是假的,心中感慨万千(雾),故作此篇. 简介 带权二分图:每条边都有权值的二分图 最大权匹配:使所选边权和最大的匹配 KM算法,全称Kuhn-Mu ... 
- 二分图 最大权匹配 km算法
		这个算法的本质还是不断的找增广路: KM算法的正确性基于以下定理:若由二分图中所有满足A[i]+B[j]=w[i,j]的边(i,j)构成的子图(称做相等子图)有完备匹配,那么这个完备匹配就是二分图的最 ... 
- 二分图匹配之最佳匹配——KM算法
		今天也大致学了下KM算法,用于求二分图匹配的最佳匹配. 何为最佳?我们能用匈牙利算法对二分图进行最大匹配,但匹配的方式不唯一,如果我们假设每条边有权值,那么一定会存在一个最大权值的匹配情况,但对于KM ... 
- HDU2255-奔小康赚大钱-二分图最大权值匹配-KM算法
		二分图最大权值匹配问题.用KM算法. 最小权值的时候把权值设置成相反数 /*-------------------------------------------------------------- ... 
- 二分图带权匹配 KM算法与费用流模型建立
		[二分图带权匹配与最佳匹配] 什么是二分图的带权匹配?二分图的带权匹配就是求出一个匹配集合,使得集合中边的权值之和最大或最小.而二分图的最佳匹配则一定为完备匹配,在此基础上,才要求匹配的边权值之和最大 ... 
- hdu2255 奔小康赚大钱 二分图最佳匹配--KM算法
		传说在遥远的地方有一个非常富裕的村落,有一天,村长决定进行制度改革:重新分配房子.这可是一件大事,关系到人民的住房问题啊.村里共有n间房间,刚好有n家老百姓,考虑到每家都要有房住(如果有老百姓没房子住 ... 
- POJ3565带权匹配——km算法
		题目:http://poj.org/problem?id=3565 神奇结论:当总边权最小时,任意两条边不相交! 转化为求二分图带权最小匹配. 可以用费用流做.但这里学一下km算法. https:// ... 
随机推荐
- HDU 1084 What Is Your Grade?(排序)
			题目在这里:1084 题目描述: “Point, point, life of student!” This is a ballad(歌谣)well known in colleges, and yo ... 
- 【PE】手动给PE文件添加一段代码MessageBoxA
			源程序是这个样子: 思路: 1.通过LordPE工具拿到所需数据 2.OllyDebug通过BP MessageBoxA拿到MessageBoxA地址 3.UE十六进制编辑器定位代码节基址 4.在代码 ... 
- Python代码结构——顺序、分支、循环
			## 顺序结构 - 按照从上到下的顺序,一条语句一条语句的执行,是最基本的结构 ## 分支结构 if condition: statement statement ... elif condition ... 
- Zookeeper+Kafka的单节点配置
			Zookeeper+Kafka的单节点配置 环境描述:Ubuntu16.04 server系统,在系统上搭建Java环境,jdk的版本为1.8或更高,我的服务器IP地址为192.168.0.106. ... 
- 图解HTTP总结(4)——返回结果的HTTP状态码
			HTTP状态码负责表示客户端HTTP请求的返回结果.标记服务器端的处理是否正常.通知出现的错误等工作. 状态码的类别 2XX 成功 200 OK 表示从客户端发来的请求在服务器端被正常处理了. 在响应 ... 
- python3 练习题100例 (十六)鸡尾酒疗法
			#!/usr/bin/env python3 # -*- coding: utf-8 -*- __author__ = 'Fan Lijun' n = input('请输入一个大于1,小于等于20的整 ... 
- 笨小熊 南阳acm62
			笨小熊 时间限制:2000 ms | 内存限制:65535 KB 难度:2 描述 笨小熊的词汇量很小,所以每次做英语选择题的时候都很头疼.但是他找到了一种方法,经试验证明,用这种方法去选择选项 ... 
- P1338 末日的传说 逆序数对
			题目描述 只要是参加jsoi活动的同学一定都听说过Hanoi塔的传说:三根柱子上的金片每天被移动一次,当所有的金片都被移完之后,世界末日也就随之降临了. 在古老东方的幻想乡,人们都采用一种奇特的方式记 ... 
- ZOJ 3329 Problem Set (期望dp)
			One Person Game There is a very simple and interesting one-person game. You have 3 dice, namely Die1 ... 
- label标签的作用
			在用户注册的时候,常常用户点击文字就需要将光标聚焦到对应的表单上面,这个是怎么实现的呢?就是下面我要介绍的<label>标签的for属性 定义:for 属性规定 label 与哪个表单元素 ... 
