题解:

KM算法模板

然后我把另一边加了点

然后写了#define int long long

然后莫名挂。。。

然后去掉就过了

代码:

  1. #include<cstdio>
  2. #include<cmath>
  3. #include<cstring>
  4. #include<algorithm>
  5. using namespace std;
  6. const int N=;
  7. int n,m,a[N][N],slack[N],x,exr[N],exl[N],match[N],visl[N],visr[N];
  8. int dfs(int x)
  9. {
  10. visl[x]=;
  11. for (int i=;i<=n;i++)
  12. if (!visr[i])
  13. {
  14. int k=exl[x]+exr[i]-a[x][i];
  15. if (k==)
  16. {
  17. visr[i]=;
  18. if (!match[i]||dfs(match[i]))
  19. {
  20. match[i]=x;
  21. return ;
  22. }
  23. }
  24. else slack[i]=min(slack[i],k);
  25. }
  26. return ;
  27. }
  28. int main()
  29. {
  30. while (~scanf("%d%d",&n,&m))
  31. {
  32. int ans1=;
  33. memset(a,,sizeof a);
  34. for (int i=;i<=n;i++)
  35. for (int j=;j<=m;j++)
  36. scanf("%d",&x),a[j][i]=x*;
  37. for (int i=;i<=n;i++)
  38. scanf("%d",&x),ans1+=a[x][i],a[x][i]++;
  39. int kkk=n;n=m;
  40. memset(exl,,sizeof exl);
  41. for (int i=;i<=n;i++)
  42. for (int j=;j<=n;j++)
  43. exl[i]=max(a[i][j],exl[i]);
  44. memset(match,,sizeof match);
  45. memset(exr,,sizeof exr);
  46. for (int i=;i<=n;i++)
  47. {
  48. for (int j=;j<=n;j++)slack[j]=1e9;
  49. while ()
  50. {
  51. memset(visl,,sizeof visl);
  52. memset(visr,,sizeof visr);
  53. if (dfs(i))break;
  54. int d=1e9;
  55. for (int j=;j<=n;j++)
  56. if (!visr[j])d=min(d,slack[j]);
  57. for (int j=;j<=n;j++)
  58. {
  59. if (visl[j])exl[j]-=d;
  60. if (visr[j])exr[j]+=d;
  61. else slack[j]-=d;
  62. }
  63. }
  64. }
  65. int ans=;
  66. for (int i=;i<=m;i++)
  67. ans+=a[match[i]][i];
  68. printf("%d %d\n",kkk-ans%,(ans-ans1)/);
  69. }
  70. }

hdu2853的更多相关文章

  1. HDU2853 Assignment KM

    原文链接http://www.cnblogs.com/zhouzhendong/p/8284105.html 题目传送门 - HDU2853 题意概括 (来自谷歌翻译) 题解 这是一道好题. 我们首先 ...

  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 & 剩余系+KM模板

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

  5. KM算法的应用

    HDU2255 模板     难度x HDU2282 思维     难度XXx HDU3722 模板     难度X HDU3395 模版 HDU1533 最小值模型 难度x HDU2853 HDU3 ...

随机推荐

  1. Submine Text 快捷键

    Ctrl+Shift+P:打开命令面板 Ctrl+P:搜索项目中的文件 Ctrl+G:跳转到第几行 Ctrl+W:关闭当前打开文件 Ctrl+Shift+W:关闭所有打开文件 Ctrl+Shift+V ...

  2. 20145316许心远《Java学习笔记》第三周总结

    20145316许心远<Java程序设计>第3周学习总结 教材学习内容总结 一.定义类: 类定义时使用class关键字 如果要将x绑定到新建的对象上,可以使用"="制定 ...

  3. python requests的使用说明

    #GET参数实例 requests.get('http://www.dict.baidu.com/s', params={'wd': 'python'}) #或 url = 'http://www.b ...

  4. Linux Swap交换分区介绍

    Swap分区在系统的物理内存不够用的时候,把物理内存中的一部分空间释放出来,以供当前运行的程序使用.那些被释放的空间可能来自一些很长时间没有什么操作的程序,这些被释放的空间被临时保存到Swap分区中, ...

  5. AVAudioSession(3):定制 Audio Session 的 Category

    本文转自:AVAudioSession(3):定制 Audio Session 的 Category | www.samirchen.com 本文内容主要来源于 Working with Catego ...

  6. Koa源码解析

    Koa是一款设计优雅的轻量级Node.js框架,它主要提供了一套巧妙的中间件机制与简练的API封装,因此源码阅读起来也十分轻松,不论你从事前端或是后端研发,相信都会有所收获. 目录结构 首先将源码下载 ...

  7. 图片上传oss--先拿server端签名再上传oss,返回id值

    目前项目oss阿里云存储图片,图片上传主要步骤是:前端从服务端拿到签名signature,再上传到oss上busket里,上传成功返回图片id (imgId),最后再给server端: 注:官网上有个 ...

  8. win64 Python下安装PIL出错解决2.7版本 (3.6版本可以使用)

    转自:http://blog.csdn.net/lhh31/article/details/51979293 1.软件版本 首先我先安装了 python 2.7 pip是  8.1.2 2.当我要安装 ...

  9. Package Manager Console的使用

    Find-Package PM> Find-Package autofac https://docs.microsoft.com/en-us/nuget/tools/ps-ref-find-pa ...

  10. AccessTokens

    https://www.oauth.com/oauth2-servers/access-tokens/ Access tokens are the thing that applications us ...