博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ5154 [Tjoi2014]匹配 【KM算法 + 枚举】
阅读量:5061 次
发布时间:2019-06-12

本文共 1793 字,大约阅读时间需要 5 分钟。

题目链接

题解

先跑出一个匹配方案

然后暴力删去每对匹配再检验一下答案是否减小

使用KM算法提升速度

#include
#include
#include
#include
#include
#include
#define REP(i,n) for (int i = 1; i <= (n); i++)#define mp(a,b) make_pair
(a,b)#define cls(s) memset(s,0,sizeof(s))#define pr pair
#define LL long long intusing 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;}

转载于:https://www.cnblogs.com/Mychael/p/9034659.html

你可能感兴趣的文章
MVC系列博客之排球计分(三)模型类的实现
查看>>
npm安装
查看>>
阅读笔记02
查看>>
2019年春季学期第二周作业
查看>>
2014北邮计算机考研复试上机题解(上午+下午)
查看>>
mySQL 教程 第7章 存储过程和函数
查看>>
OGG同步Oracle到Kafka(Kafka Connect Handler)
查看>>
算法笔记_056:蓝桥杯练习 未名湖边的烦恼(Java)
查看>>
idea的maven项目无法引入junit
查看>>
jquery实现限制textarea输入字数
查看>>
thinkphp5 csv格式导入导出(多数据处理)
查看>>
页面置换算法-LRU(Least Recently Used)c++实现
查看>>
如何获取Android系统时间是24小时制还是12小时制
查看>>
fur168.com 改成5917电影
查看>>
PHP上传RAR压缩包并解压目录
查看>>
codeforces global round 1题解搬运
查看>>
python os模块
查看>>
Codeforces 719B Anatoly and Cockroaches
查看>>
jenkins常用插件汇总
查看>>
c# 泛型+反射
查看>>