原文链接http://www.cnblogs.com/zhouzhendong/p/8284105.html


题目传送门 - HDU2853


题意概括

(来自谷歌翻译)


题解

  这是一道好题。

  我们首先把所有边权都乘上(n+1)。

  然后对于原来就有的边,我们再+1.

  然后跑一跑KM,利用的原边数就是ans%(n+1),最终方案的效果就是ans/(n+1)

  为什么是对的?

  考虑1和n+1差距很大。

  事实上,原来的边权看作第一关键字,然后是否选用原边看作第二关键字,然后通过给第一关键字乘一个较大的数来巧妙的KM求解。


代码

#include <cstring>
#include <algorithm>
#include <cstdio>
#include <cstdlib>
#include <cmath>
using namespace std;
const int N=55,Inf=1e9+7;
int n,m,g[N][N],ex[N],ey[N],match[N],minadd[N];
bool visx[N],visy[N];
bool Match(int x){
visx[x]=1;
for (int i=1;i<=m;i++)
if (!visy[i]){
int add=ex[x]+ey[i]-g[x][i];
if (!add){
visy[i]=1;
if (!match[i]||Match(match[i])){
match[i]=x;
return 1;
}
}
else
minadd[i]=min(minadd[i],add);
}
return 0;
}
int KM(){
memset(match,0,sizeof match);
memset(ey,0,sizeof ey);
for (int i=1;i<=n;i++){
ex[i]=g[i][1];
for (int j=2;j<=m;j++)
ex[i]=max(ex[i],g[i][j]);
}
for (int i=1;i<=n;i++){
for (int j=1;j<=m;j++)
minadd[j]=Inf;
while (1){
memset(visx,0,sizeof visx);
memset(visy,0,sizeof visy);
if (Match(i))
break;
int delta=Inf;
for (int j=1;j<=m;j++)
if (!visy[j])
delta=min(delta,minadd[j]);
for (int j=1;j<=n;j++)
if (visx[j])
ex[j]-=delta;
for (int j=1;j<=m;j++)
if (visy[j])
ey[j]+=delta;
else
minadd[j]-=delta;
}
}
int ans=0;
for (int i=1;i<=m;i++)
if (match[i])
ans+=g[match[i]][i];
return ans;
}
int main(){
while (~scanf("%d%d",&n,&m)){
for (int i=1;i<=n;i++)
for (int j=1;j<=m;j++){
scanf("%d",&g[i][j]);
g[i][j]*=n+1;
}
int pre_val=0;
for (int i=1,x;i<=n;i++){
scanf("%d",&x);
pre_val+=g[i][x]/(n+1);
g[i][x]++;
}
int ans=KM();
printf("%d %d\n",n-ans%(n+1),ans/(n+1)-pre_val);
}
return 0;
}

  

HDU2853 Assignment KM的更多相关文章

  1. hdu 2853 Assignment KM算法

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2853 Last year a terrible earthquake attacked Sichuan ...

  2. HDU-2853 Assignment

    求二分最大匹配,但还要尽量接近原匹配... 解决方法:对于N个顶点的二分图,每条边同时乘上一个比N稍微大的数N',然后对于在原匹配的边就都+1. 经过这样处理,求得的答案Ans乘除N'即是原图的最大匹 ...

  3. hdu2853 Assignment 完美匹配 多校联赛的好题

    PS:好题.不看题解绝对AC不了. 题解来源: http://blog.csdn.net/niushuai666/article/details/7176290 http://www.cnblogs. ...

  4. 【HDU 2853】Assignment (KM)

    Assignment Problem Description Last year a terrible earthquake attacked Sichuan province. About 300, ...

  5. HDU 2853 Assignment(KM最大匹配好题)

    HDU 2853 Assignment 题目链接 题意:如今有N个部队和M个任务(M>=N),每一个部队完毕每一个任务有一点的效率,效率越高越好.可是部队已经安排了一定的计划,这时须要我们尽量用 ...

  6. Assignment (HDU 2853 最大权匹配KM)

    Assignment Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  7. Assignment HDU - 2853(二分图匹配 KM 新边旧边)

    传送门: Assignment HDU - 2853 题意:题意直接那松神的题意了.给了你n个公司和m个任务,然后给你了每个公司处理每个任务的效率.然后他已经给你了每个公司的分配方案,让你求出最多能增 ...

  8. HDU 2853 & 剩余系+KM模板

    题意: 给你一张二分图,给一个原匹配,求原匹配改动最少的边数使其边权和最大. SOL: 我觉得我的智商还是去搞搞文化课吧..这种题给我独立做我大概只能在暴力优化上下功夫.. 这题的处理方法让我想到了剩 ...

  9. hdu 2426 Interesting Housing Problem 最大权匹配KM算法

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2426 For any school, it is hard to find a feasible ac ...

随机推荐

  1. CSS集锦

    div内容自动换行:word-wrap:break-word;word-break:break-all;

  2. 开启gtid导入报错

    导入报错 [root@redis02 data]# mysql -u root -p < ht.sqlEnter password: ERROR 1840 (HY000) at line 24: ...

  3. Sql语句之并(UNION)、交(INTERSECT)、差(minus)、除去(EXCEPT)

    UNION 查询选修了180101号或180102号课程或二者都选修了的学生学号.课程号和成绩. (SELECT  学号, 课程号, 成绩 FROM   学习 WHERE   课程号='180101' ...

  4. Mysql --初识mysql语句

    本节课先对mysql的基本语法初体验. 操作文件夹(库) 增 create database db1 charset utf8;#db1 是数据库的名字 也就是文件夹 查 # 查看当前创建的数据库 s ...

  5. 前端 -----jQuery的位置信息

    08-jQuery的位置信息   jQuery的位置信息跟JS的client系列.offset系列.scroll系列封装好的一些简便api. 一.宽度和高度 获取宽度 .width() 描述:为匹配的 ...

  6. 前端 ----jQuery的属性操作

    04-jQuery的属性操作   jquery的属性操作模块分为四个部分:html属性操作,dom属性操作,类样式操作和值操作 html属性操作:是对html文档中的属性进行读取,设置和移除操作.比如 ...

  7. linux-history显示历史命令执行时间

    vim  ~/.bashrc 或者 ~/.bash_profile 增加:export HISTTIMEFORMAT="%F %T  " 一次会话的话先执行 然后使用history ...

  8. JS 手机端多张图片上传

    代码如下 <!DOCTYPE html> <html lang="zh-cn"> <head> <meta charset="u ...

  9. 根据 label 的 text 的大小和长度 获取 尺寸

    NSDictionary *attribute = @{NSFontAttributeName: [UIFont systemFontOfSize:17]};CGSize size = [_cards ...

  10. Django框架第一篇基础

    一个小问题: 什么是根目录:就是没有路径,只有域名..url(r'^$') 补充一张关于wsgiref模块的图片 一.MTV模型 Django的MTV分别代表: Model(模型):和数据库相关的,负 ...