题目传送门

  1. /*
  2. 最小费用流:KM算法是求最大流,只要w = -w就可以了,很经典的方法
  3. */
  4. #include <cstdio>
  5. #include <cmath>
  6. #include <algorithm>
  7. #include <cstring>
  8. using namespace std;
  9. const int MAXN = 1e2 + ;
  10. const int INF = 0x3f3f3f3f;
  11. int x[MAXN], y[MAXN];
  12. int w[MAXN][MAXN];
  13. int visx[MAXN], visy[MAXN];
  14. int ly[MAXN];
  15. int mx[MAXN], my[MAXN];
  16. int hx[MAXN], hy[MAXN];
  17. char maze[MAXN][MAXN];
  18. int n, m, un, vn, d;
  19. bool DFS(int u) {
  20. visx[u] = true;
  21. for (int i=; i<=un; ++i) {
  22. if (!visy[i] && x[u] + y[i] == w[u][i]) {
  23. visy[i] = true;
  24. if (ly[i] == - || DFS (ly[i])) {
  25. ly[i] = u; return true;
  26. }
  27. }
  28. else if (x[u] + y[i] > w[u][i]) d = min (d, x[u] + y[i] - w[u][i]);
  29. }
  30. return false;
  31. }
  32. int KM(void) {
  33. for (int i=; i<=un; ++i) {
  34. x[i] = -INF;
  35. for (int j=; j<=vn; ++j) {
  36. x[i] = max (x[i], w[i][j]);
  37. }
  38. }
  39. memset (ly, -, sizeof (ly));
  40. memset (y, , sizeof (y));
  41. for (int i=; i<=un; ++i) {
  42. while (true) {
  43. memset (visx, false, sizeof (visx));
  44. memset (visy, false, sizeof (visy));
  45. d = INF;
  46. if (DFS (i)) break;
  47. for (int i=; i<=un; ++i) {
  48. if (visx[i]) x[i] -= d;
  49. }
  50. for (int j=; j<=vn; ++j) {
  51. if (visy[j]) y[j] += d;
  52. }
  53. }
  54. }
  55. int res = ;
  56. for (int i=; i<=un; ++i) {
  57. res += x[i] + y[i];
  58. }
  59. return res;
  60. }
  61. int main(void) { //HDOJ 1533 Going Home
  62. //freopen ("HDOJ_1533.in", "r", stdin);
  63. while (scanf ("%d%d", &n, &m) == ) {
  64. if (!n && !m) break;
  65. for (int i=; i<=n; ++i) {
  66. scanf ("%s", maze[i] + );
  67. }
  68. un = vn = ;
  69. for (int i=; i<=n; ++i) {
  70. for (int j=; j<=m; ++j) {
  71. if (maze[i][j] == 'm') mx[++un] = i, my[un] = j;
  72. else if (maze[i][j] == 'H') hx[++vn] = i, hy[vn] = j;
  73. }
  74. }
  75. for (int i=; i<=un; ++i) {
  76. for (int j=; j<=vn; ++j) {
  77. w[i][j] = -(abs (mx[i] - hx[j]) + abs (my[i] - hy[j]));
  78. }
  79. }
  80. printf ("%d\n", -KM ());
  81. }
  82. return ;
  83. }

最大流增广路(KM算法) HDOJ 1533 Going Home的更多相关文章

  1. 最大流增广路(KM算法) HDOJ 2255 奔小康赚大钱

    题目传送门 /* KM:裸题第一道,好像就是hungary的升级版,不好理解,写点注释 KM算法用来解决最大权匹配问题: 在一个二分图内,左顶点为X,右顶点为Y,现对于每组左右连接Xi,Yj有权w(i ...

  2. 最大流增广路(KM算法) HDOJ 1853 Cyclic Tour

    题目传送门 /* KM: 相比HDOJ_1533,多了重边的处理,还有完美匹配的判定方法 */ #include <cstdio> #include <cmath> #incl ...

  3. hdu 3549 Flow Problem【最大流增广路入门模板题】

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=3549 Flow Problem Time Limit: 5000/5000 MS (Java/Others ...

  4. Power Network (最大流增广路算法模板题)

    Time Limit: 2000MS   Memory Limit: 32768K Total Submissions: 20754   Accepted: 10872 Description A p ...

  5. 网络最大流最短增广路Dinic算法模板

    #include<cstdio> #include<cstring> #include<string> #include<cmath> #include ...

  6. 网络最大流增广路模板(EK &amp; Dinic)

    EK算法: int fir[maxn]; int u[maxm],v[maxm],cap[maxm],flow[maxm],nex[maxm]; int e_max; int p[maxn],q[ma ...

  7. 一般增广路方法求网络最大流(Ford-Fulkerson算法)

    /* Time:2015-6-18 接触网络流好几天了 写的第一个模版————Ford-Fulkerson算法 作用:求解网络最大流 注意:源点是0 汇点是1 如果题目输入的是1到n 请预处理减1 * ...

  8. 网络流初步:<最大流>——核心(增广路算法)(模板)

    增广路的核心就是引入了反向边,使在进行道路探索选择的时候增加了类似于退路的东西[有一点dp的味道??] 具体操作就是:1.首先使用结构体以及数组链表next[ MAXN ]进行边信息的存储 2.[核心 ...

  9. HDU3549 Flow Problem(网络流增广路算法)

    题目链接. 分析: 网络流增广路算法模板题.http://www.cnblogs.com/tanhehe/p/3234248.html AC代码: #include <iostream> ...

随机推荐

  1. 前端开发:JavaScript---ECMAScript

    JavaScript:JavaScript是一种web前端的描述语言,也是一种基于对象(object)和事件驱动(Event Driven)的脚本语言.它运行在客户端从而减轻服务器的负担. js是一种 ...

  2. 【BZOJ4868】期末考试(整数三分)

    题意: 有n位同学,每位同学都参加了全部的m门课程的期末考试,都在焦急的等待成绩的公布.第i位同学希望在第ti天 或之前得知所.有.课程的成绩.如果在第ti天,有至少一门课程的成绩没有公布,他就会等待 ...

  3. 在mysql数据库中,文章表设计有啥好的思路

    Q: 用mysql设计一张文章表,不知道有啥好的思路! 我是这样的,应为考虑附件和图片,所以我的文章表除了有varchar(1000)的文章内容,还设置了个Bolb接收附件和图片. 我用的是mysql ...

  4. Ubuntu 16.04安装unrar解压RAR文件

    除了7zip:http://www.cnblogs.com/EasonJim/p/7124306.html之外,还可以安装unrar进行解压RAR文件. 安装 sudo apt-get install ...

  5. 编程精粹--编写高质量C语言代码(3):自己设计并使用断言(二)

    接着上一遍文章<<编程精粹--编写高质量C语言代码(2):自己设计并使用断言(一)>>,继续学习怎样自己设计并使用断言,来更加easy,更加不费力地自己主动寻找出程序中的错误. ...

  6. Spring PropertyPlaceholderConfigure 载入配置文件

    在開始这篇博客的主题之前,我们先来了解一下Spring配置文件以及包括的相关内容. watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2 ...

  7. java.lang.IllegalArgumentException: sheetName &#39;&#39; is invalid

    1.错误描写叙述 java.lang.IllegalArgumentException: sheetName '' is invalid - character count MUST be great ...

  8. c# 获取根节点的属性信息

    <?xml version="1.0" encoding="UTF-8"?> <!--课程封面信息 --> <GK version ...

  9. Copy Selected Text from any window

    https://social.msdn.microsoft.com/Forums/windows/en-US/1dc356e6-9441-44de-9eda-247003fa6ef5/copy-sel ...

  10. URL 字段简析

    URL:统一资源定位符:URL是uri的一个子集,另外一个子集是URN. URL语法:(来自HTTP权威指南中文版P29) 组件 描述 默认值 方案 访问服务器以获取资源时要使用哪种协议 无 用户 某 ...