hdu2853
题解:
KM算法模板
然后我把另一边加了点
然后写了#define int long long
然后莫名挂。。。
然后去掉就过了
代码:
- #include<cstdio>
- #include<cmath>
- #include<cstring>
- #include<algorithm>
- using namespace std;
- const int N=;
- int n,m,a[N][N],slack[N],x,exr[N],exl[N],match[N],visl[N],visr[N];
- int dfs(int x)
- {
- visl[x]=;
- for (int i=;i<=n;i++)
- if (!visr[i])
- {
- int k=exl[x]+exr[i]-a[x][i];
- if (k==)
- {
- visr[i]=;
- if (!match[i]||dfs(match[i]))
- {
- match[i]=x;
- return ;
- }
- }
- else slack[i]=min(slack[i],k);
- }
- return ;
- }
- int main()
- {
- while (~scanf("%d%d",&n,&m))
- {
- int ans1=;
- memset(a,,sizeof a);
- for (int i=;i<=n;i++)
- for (int j=;j<=m;j++)
- scanf("%d",&x),a[j][i]=x*;
- for (int i=;i<=n;i++)
- scanf("%d",&x),ans1+=a[x][i],a[x][i]++;
- int kkk=n;n=m;
- memset(exl,,sizeof exl);
- for (int i=;i<=n;i++)
- for (int j=;j<=n;j++)
- exl[i]=max(a[i][j],exl[i]);
- memset(match,,sizeof match);
- memset(exr,,sizeof exr);
- for (int i=;i<=n;i++)
- {
- for (int j=;j<=n;j++)slack[j]=1e9;
- while ()
- {
- memset(visl,,sizeof visl);
- memset(visr,,sizeof visr);
- if (dfs(i))break;
- int d=1e9;
- for (int j=;j<=n;j++)
- if (!visr[j])d=min(d,slack[j]);
- for (int j=;j<=n;j++)
- {
- if (visl[j])exl[j]-=d;
- if (visr[j])exr[j]+=d;
- else slack[j]-=d;
- }
- }
- }
- int ans=;
- for (int i=;i<=m;i++)
- ans+=a[match[i]][i];
- printf("%d %d\n",kkk-ans%,(ans-ans1)/);
- }
- }
hdu2853的更多相关文章
- HDU2853 Assignment KM
原文链接http://www.cnblogs.com/zhouzhendong/p/8284105.html 题目传送门 - HDU2853 题意概括 (来自谷歌翻译) 题解 这是一道好题. 我们首先 ...
- HDU-2853 Assignment
求二分最大匹配,但还要尽量接近原匹配... 解决方法:对于N个顶点的二分图,每条边同时乘上一个比N稍微大的数N',然后对于在原匹配的边就都+1. 经过这样处理,求得的答案Ans乘除N'即是原图的最大匹 ...
- hdu2853 Assignment 完美匹配 多校联赛的好题
PS:好题.不看题解绝对AC不了. 题解来源: http://blog.csdn.net/niushuai666/article/details/7176290 http://www.cnblogs. ...
- HDU 2853 & 剩余系+KM模板
题意: 给你一张二分图,给一个原匹配,求原匹配改动最少的边数使其边权和最大. SOL: 我觉得我的智商还是去搞搞文化课吧..这种题给我独立做我大概只能在暴力优化上下功夫.. 这题的处理方法让我想到了剩 ...
- KM算法的应用
HDU2255 模板 难度x HDU2282 思维 难度XXx HDU3722 模板 难度X HDU3395 模版 HDU1533 最小值模型 难度x HDU2853 HDU3 ...
随机推荐
- Submine Text 快捷键
Ctrl+Shift+P:打开命令面板 Ctrl+P:搜索项目中的文件 Ctrl+G:跳转到第几行 Ctrl+W:关闭当前打开文件 Ctrl+Shift+W:关闭所有打开文件 Ctrl+Shift+V ...
- 20145316许心远《Java学习笔记》第三周总结
20145316许心远<Java程序设计>第3周学习总结 教材学习内容总结 一.定义类: 类定义时使用class关键字 如果要将x绑定到新建的对象上,可以使用"="制定 ...
- python requests的使用说明
#GET参数实例 requests.get('http://www.dict.baidu.com/s', params={'wd': 'python'}) #或 url = 'http://www.b ...
- Linux Swap交换分区介绍
Swap分区在系统的物理内存不够用的时候,把物理内存中的一部分空间释放出来,以供当前运行的程序使用.那些被释放的空间可能来自一些很长时间没有什么操作的程序,这些被释放的空间被临时保存到Swap分区中, ...
- AVAudioSession(3):定制 Audio Session 的 Category
本文转自:AVAudioSession(3):定制 Audio Session 的 Category | www.samirchen.com 本文内容主要来源于 Working with Catego ...
- Koa源码解析
Koa是一款设计优雅的轻量级Node.js框架,它主要提供了一套巧妙的中间件机制与简练的API封装,因此源码阅读起来也十分轻松,不论你从事前端或是后端研发,相信都会有所收获. 目录结构 首先将源码下载 ...
- 图片上传oss--先拿server端签名再上传oss,返回id值
目前项目oss阿里云存储图片,图片上传主要步骤是:前端从服务端拿到签名signature,再上传到oss上busket里,上传成功返回图片id (imgId),最后再给server端: 注:官网上有个 ...
- win64 Python下安装PIL出错解决2.7版本 (3.6版本可以使用)
转自:http://blog.csdn.net/lhh31/article/details/51979293 1.软件版本 首先我先安装了 python 2.7 pip是 8.1.2 2.当我要安装 ...
- Package Manager Console的使用
Find-Package PM> Find-Package autofac https://docs.microsoft.com/en-us/nuget/tools/ps-ref-find-pa ...
- AccessTokens
https://www.oauth.com/oauth2-servers/access-tokens/ Access tokens are the thing that applications us ...