这题使我对km多了一些看法

写给自己看。。

km结束后bx[i] + by[j] == w[i][j], 所以所有bx与by的和即为w的和

而且记住bx[i] + by[j] >= w[i][j] 这个式子 那么bx与by的最小值 即为km结束后的值

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstring>
  4. #include <iostream>
  5. #include <queue>
  6. #include <algorithm>
  7. #include <vector>
  8. #define mem(a, b) memset(a, b, sizeof(a))
  9. using namespace std;
  10. const int maxn = , INF = 0x7fffffff;
  11. int usedx[maxn], usedy[maxn], w[maxn][maxn], bx[maxn], by[maxn], cx[maxn], cy[maxn];
  12. int nx, ny, n, minn, min_value;
  13.  
  14. bool dfs(int u)
  15. {
  16. usedx[u] = ;
  17. for(int i=; i<=ny; i++)
  18. {
  19. if(usedy[i] == -)
  20. {
  21. int t = bx[u] + by[i] - w[u][i];
  22. if(t == )
  23. {
  24. usedy[i] = ;
  25. if(cy[i] == - || dfs(cy[i]))
  26. {
  27. cy[i] = u;
  28. cx[u] = i;
  29. return ;
  30. }
  31. }
  32. else if(t > )
  33. minn = min(minn, t);
  34. }
  35. }
  36. return ;
  37. }
  38.  
  39. int km()
  40. {
  41. mem(cx, -);
  42. mem(cy, -);
  43. mem(bx, -);
  44. mem(by, );
  45. for(int i=; i<=nx; i++)
  46. for(int j=; j<=ny; j++)
  47. bx[i] = max(bx[i], w[i][j]);
  48. for(int i=; i<=nx; i++)
  49. {
  50. while()
  51. {
  52. minn = INF;
  53. mem(usedx, -);
  54. mem(usedy, -);
  55. if(dfs(i)) break;
  56. for(int j=; j<=nx; j++)
  57. if(usedx[j] != -) bx[j] -= minn;
  58. for(int j=; j<=ny; j++)
  59. if(usedy[j] != -) by[j] += minn;
  60. }
  61. }
  62. min_value = ;
  63. for(int i=; i<=n; i++)
  64. if(cx[i] != -)
  65. min_value += w[i][cx[i]];
  66.  
  67. return min_value;
  68.  
  69. }
  70.  
  71. int main()
  72. {
  73. while(~scanf("%d",&n))
  74. {
  75. for(int i=; i<=n; i++)
  76. for(int j=; j<=n; j++)
  77. scanf("%d",&w[i][j]);
  78. nx = ny = n;
  79. int ans = km();
  80. for(int i=; i<=nx; i++)
  81. {
  82. if(i != ) printf(" ");
  83. printf("%d", bx[i]);
  84. }
  85. printf("\n");
  86. for(int i=; i<=ny; i++)
  87. {
  88. if(i != ) printf(" ");
  89. printf("%d", by[i]);
  90. }
  91. printf("\n");
  92. cout<< ans <<endl;
  93.  
  94. }
  95. return ;
  96. }

Golden Tiger Claw UVA - 11383(km原理)的更多相关文章

  1. uva11383 Golden Tiger Claw 深入理解km算法

    /** 题目: uva11383 Golden Tiger Claw 深入理解km算法 链接:https://vjudge.net/problem/UVA-11383 题意:lv 思路:lrj训练指南 ...

  2. 【UVA11383】 Golden Tiger Claw 【二分图KM算法(板子)】

    题目 题目传送门:https://www.luogu.com.cn/problem/UVA11383 分析 最近刚刚学了二分图,然后来了一个这样的题,看完题意之后,稍微想一想就能想出来是一个二分图,然 ...

  3. 【UVA 11383】 Golden Tiger Claw (KM算法副产物)

    Omi, Raymondo, Clay and Kimiko are on new adventure- in search of new Shen Gong Wu. But EvilBoy Geni ...

  4. UVA 11383 - Golden Tiger Claw(二分图完美匹配扩展)

    UVA 11383 - Golden Tiger Claw 题目链接 题意:给定每列和每行的和,给定一个矩阵,要求每一个格子(x, y)的值小于row(i) + col(j),求一种方案,而且全部行列 ...

  5. UVA11383 Golden Tiger Claw

    题目 UVA11383 Golden Tiger Claw 做法 \(KM\)好题啊,满足所有边\(l(x)+l(y)≥w(x,y)\)(个人理解,如不对请及时留言),这样能满足\(\sum\limi ...

  6. Golden Tiger Claw(二分图)

    Golden Tiger Claw 题意 找到和最小的两个序列a,b满足对于任意i,j有a[i]+b[j]>=c[i][j](矩阵c给出). solution 裸的二分图就水过了-- #incl ...

  7. UVA 11383 Golden Tiger Claw 金虎爪(KM算法)

    题意: 给一个n*n的矩阵,每个格子中有正整数w[i][j],试为每行和每列分别确定一个数字row[i]和col[i],使得任意格子w[i][j]<=row[i]+col[j]恒成立.先输row ...

  8. 【KM算法】UVA 11383 Golden Tiger Claw

    题目大意 给你一个\(n×n\)的矩阵G,每个位置有一个权,求两个一维数组\(row\)和\(col\),使\(row[i] + col[j]\ge G[i][j]\),并且\(∑row+∑col\) ...

  9. Uva - 11383 - Golden Tiger Claw

    题意:一个N*N的矩阵,第i行第j列的元素大小为w[i][j],每行求一个数row[i],每列求一个数col[j],使得row[i] + col[j] >= w[i][j],且所有的row[]与 ...

随机推荐

  1. js Date对象要注意的问题(时间转换)

    1.时间戳和时间对象可以灵活转变: let n = new Date() // 返回的是当前时间对应的国际时间 let nt =n.getTime() let n2 =new Date(nt) con ...

  2. STM32L431驱动带UC1698芯片调试记录

    1, 数据线连接方式,这次使用的是8080格式的接口,如下 2. 主要是信号和数据引脚 DATA0-DATA7  并口的数据 RST 复位信号 WR 写信号 RD 读信号 C/D 数据还是命令 CS片 ...

  3. 单元测试或main方法 进行单元测试时 idea检查其他类的语法是否正确的去除方法

    在进行单元测试或者main方法时,在 运行/调试 设置中设置想要使用的测试单位的 before launch 即可

  4. 详细讲解 A/B 测试关键步骤,快来检查下还有哪些疏漏的知识点

    作为一种对照实验方法,A/B 测试通过比较两个 (或多个) 不同版本之间的差异来验证假设是否正确.该方法将特定测试组从实验其余部分中独立出来,从而得出可靠结果.在被测人不知情且测试场景真实的情况下,A ...

  5. centos 7 安装和基本配置

    U盘安装centos 7 还是官方文档最准确. 下载centos https://docs.centos.org/en-US/centos/install-guide/downloading/ 制作安 ...

  6. 3星|《给你讲个笑话:我是创业公司CEO》:创业成功就是上帝掷骰子

    给你讲个笑话:我是创业公司CEO 作者有过数次创业经历,最后一次在济南创业,后来公司搬到北京,看书中的交代公司目前好像还不算太成功.书中交代作者公司的业务是文化产品的策划,没细说做什么,也没说做成过哪 ...

  7. 用 Python 构建一个极小的区块链

    虽然有些人认为区块链是一个早晚会出现问题的解决方案,但是毫无疑问,这个创新技术是一个计算机技术上的奇迹.那么,究竟什么是区块链呢? 区块链 以比特币(Bitcoin)或其它加密货币按时间顺序公开地记录 ...

  8. 关于JavaScript定时器我的一些小理解

    因为自己在平时工作中,有些功能需要用到定时器,但是定时器并不像我们表边上看到的那样,所以这周末我看看书查查资料,深入研究了一下JavaScript中的定时器,那么废话不多说,下面进入我们今天的正题. ...

  9. C++ STL 全排列

    摘自爱国师哥博客https://www.cnblogs.com/aiguona/p/7304945.html 一.概念 从n个不同元素中任取m(m≤n)个元素,按照一定的顺序排列起来,叫做从n个不同元 ...

  10. Java接口interface,匿名内部类

    接口 1.接口内部为 常量+公用的抽象方法.类必须实现接口中的所有方法 2.接口的语法格式:不写abstract会自动添加,可以继承多个接口 修饰符不能使private,protected [修饰符] ...