题目链接:https://vjudge.net/problem/UVA-11383

题解:

根据KM()算法,标杆满足:l(x) + l(y) >= w(x, y)

当求完最大权匹配之后,所有标杆在满足:l(x) + l(y) >= w(x, y) 的条件下,和最小。

代码如下:

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. typedef long long LL;
  4. const int INF = 2e9;
  5. const LL LNF = 9e18;
  6. const int mod = 1e9+;
  7. const int MAXN = +;
  8.  
  9. int nx, ny;
  10. int g[MAXN][MAXN], linker[MAXN], lx[MAXN], ly[MAXN], slack[MAXN];
  11. bool visx[MAXN], visy[MAXN];
  12.  
  13. bool DFS(int x)
  14. {
  15. visx[x] = true;
  16. for(int y = ; y<=ny; y++)
  17. {
  18. if(visy[y]) continue;
  19. int tmp = lx[x] + ly[y] - g[x][y];
  20. if(tmp==)
  21. {
  22. visy[y] = true;
  23. if(linker[y]==- || DFS(linker[y]))
  24. {
  25. linker[y] = x;
  26. return true;
  27. }
  28. }
  29. else
  30. slack[y] = min(slack[y], tmp);
  31. }
  32. return false;
  33. }
  34.  
  35. void KM()
  36. {
  37. memset(linker, -, sizeof(linker));
  38. memset(ly, , sizeof(ly));
  39. for(int i = ; i<=nx; i++)
  40. {
  41. lx[i] = -INF;
  42. for(int j = ; j<=ny; j++)
  43. lx[i] = max(lx[i], g[i][j]);
  44. }
  45.  
  46. for(int x = ; x<=nx; x++)
  47. {
  48. for(int i = ; i<=ny; i++)
  49. slack[i] = INF;
  50. while(true)
  51. {
  52. memset(visx, , sizeof(visx));
  53. memset(visy, , sizeof(visy));
  54.  
  55. if(DFS(x)) break;
  56. int d = INF;
  57. for(int i = ; i<=ny; i++)
  58. if(!visy[i])
  59. d = min(d, slack[i]);
  60.  
  61. for(int i = ; i<=nx; i++)
  62. if(visx[i])
  63. lx[i] -= d;
  64. for(int i = ; i<=ny; i++)
  65. {
  66. if(visy[i]) ly[i] += d;
  67. else slack[i] -= d;
  68. }
  69. }
  70. }
  71. }
  72.  
  73. int main()
  74. {
  75. int n;
  76. while(scanf("%d",&n)!=EOF)
  77. {
  78. nx = ny = n;
  79. for(int i = ; i<=nx; i++)
  80. for(int j = ; j<=ny; j++)
  81. scanf("%d",&g[i][j]);
  82.  
  83. KM();
  84. int sum = ;
  85. for(int i = ; i<=nx; i++) printf("%d ", lx[i]), sum += lx[i];
  86. printf("\n");
  87. for(int i = ; i<=ny; i++) printf("%d ", ly[i]), sum += ly[i];
  88. printf("\n");
  89. printf("%d\n", sum);
  90. }
  91. }

UVA11383 Golden Tiger Claw —— KM算法的更多相关文章

  1. UVA11383 Golden Tiger Claw KM算法

    题目链接:传送门 分析 这道题乍看上去没有思路,但是我们仔细一想就会发现这道题其实是一个二分图最大匹配的板子 我们可以把这道题想象成将男生和女生之间两两配对,使他们的好感度最大 我们把矩阵中的元素\( ...

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

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

  3. UVA11383 Golden Tiger Claw

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

  4. UVA-11383 Golden Tiger Claw (KM算法)

    题目大意:一张可行二分图的权值以邻接矩阵的形式给了出来,现在要找每一个节点的可行顶标,使顶标和最小. 题目分析:直接用KM算法,结束后顶标之和最小...模板题. 代码如下: # include< ...

  5. 【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 ...

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

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

  7. Golden Tiger Claw(二分图)

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

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

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

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

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

随机推荐

  1. luogu2485 [SDOI2011]计算器 poj3243 Clever Y BSGS算法

    BSGS 算法,即 Baby Step,Giant Step 算法.拔山盖世算法. 计算 \(a^x \equiv b \pmod p\). \(p\)为质数时 特判掉 \(a,p\) 不互质的情况. ...

  2. String字符串去掉双引号

    public static String stringReplace(String str) { //去掉" "号 String str= str.replace("\& ...

  3. 图论trainning-part-1 D. Going in Cycle!!

    D. Going in Cycle!! Time Limit: 3000ms Memory Limit: 131072KB 64-bit integer IO format: %lld      Ja ...

  4. 二分图最大权完美匹配KM算法

    KM算法二分图 KM求得二分图与普通二分图的不同之处在于:此二分图的每条边(男生女生)上都附了权值(好感度).然后,求怎样完美匹配使得权值之和最大. 这,不止一般的麻烦啊. 可以通过一个期望值来求. ...

  5. xth 砍树(codevs 1369)

    题目描述 Description 在一个凉爽的夏夜,xth 和 rabbit 来到花园里砍树.为啥米要砍树呢?是这样滴,小菜儿的儿子窄森要出生了.Xth这个做伯伯的自然要做点什么.于是他决定带着rab ...

  6. android修改系统时系统黑屏时不进入休眠状态

    基于android4.4修改,在frameworks/base/services/java/com/android/server/power/PowerManagerService.java里,查看休 ...

  7. [USACO12MAR]拖拉机

    题目描述 After a long day of work, Farmer John completely forgot that he left his tractor in the middle ...

  8. msp430项目编程05

    msp430中项目---TFT彩屏显示(续) 1.TFT彩屏工作原理 2.电路原理说明 3.代码(静态显示) 4.代码(动态显示) 5.项目总结 msp430项目编程 msp430入门学习

  9. loj6158 A+B Problem (扩展KMP)

    题目: https://loj.ac/problem/6158 分析: 先把S串逆置,就是从低位向高位看 我们再弄个T串,S串前面有x个连续的0,那么T串前面也有x个连续的0 第x+1位,满足S[x+ ...

  10. MongoDB学习day08--mongoose预定义修饰符和getter、setter修饰符

    一.mongoose预定义修饰符 lowercase. uppercase . trim var UserSchema=mongoose.Schema({ name:{ type:String, tr ...