洛谷传送门

带权二分图最大权完美匹配。

裸的km算法。

注意开long long。

  1. #include <cstdio>
  2. #include <cstring>
  3. #include <iostream>
  4.  
  5. using namespace std;
  6.  
  7. const long long INF = ;
  8. int n, match[];
  9. long long p[][], q[][], love[][], ex_boy[], ex_girl[], slack[];
  10. bool vis_boy[], vis_girl[];
  11.  
  12. bool find(int i)
  13. {
  14. int j;
  15. long long gap;
  16. vis_girl[i] = ;
  17. for(j = ; j <= n; j++)
  18. {
  19. if(vis_boy[j]) continue;
  20. gap = ex_girl[i] + ex_boy[j] - love[i][j];
  21. if(gap == )
  22. {
  23. vis_boy[j] = ;
  24. if(match[j] == - || find(match[j]))
  25. {
  26. match[j] = i;
  27. return ;
  28. }
  29. }
  30. else slack[j] = min(slack[j], gap);
  31. }
  32. return ;
  33. }
  34.  
  35. long long KM()
  36. {
  37. int i, j;
  38. long long d, ret = ;
  39. memset(match, -, sizeof(match));
  40. for(i = ; i <= n; i++)
  41. for(j = ; j <= n; j++)
  42. ex_girl[i] = max(ex_girl[i], love[i][j]);
  43. for(i = ; i <= n; i++)
  44. {
  45. for(j = ; j <= n; j++) slack[j] = INF;
  46. while()
  47. {
  48. memset(vis_boy, , sizeof(vis_boy));
  49. memset(vis_girl, , sizeof(vis_girl));
  50. if(find(i)) break;
  51. d = INF;
  52. for(j = ; j <= n; j++)
  53. if(!vis_boy[j])
  54. d = min(d, slack[j]);
  55. for(j = ; j <= n; j++)
  56. {
  57. if(vis_boy[j]) ex_boy[j] += d;
  58. if(vis_girl[j]) ex_girl[j] -= d;
  59. }
  60. }
  61. }
  62. for(i = ; i <= n; i++) ret += love[match[i]][i];
  63. return ret;
  64. }
  65.  
  66. int main()
  67. {
  68. int i, j;
  69. scanf("%d", &n);
  70. for(i = ; i <= n; i++)
  71. for(j = ; j <= n; j++)
  72. scanf("%lld", &p[i][j]);
  73. for(i = ; i <= n; i++)
  74. for(j = ; j <= n; j++)
  75. scanf("%lld", &q[i][j]);
  76. for(i = ; i <= n; i++)
  77. for(j = ; j <= n; j++)
  78. love[i][j] = p[i][j] * q[j][i];
  79. printf("%lld", KM());
  80. return ;
  81. }

运动员最佳匹配问题(km算法)的更多相关文章

  1. 运动员最佳匹配问题 KM算法:带权二分图匹配

    题面: 羽毛球队有男女运动员各n人.给定2 个n×n矩阵P和Q.P[i][j]是男运动员i和女运动员j配对组成混合双打的男运动员竞赛优势:Q[i][j]是女运动员i和男运动员j配合的女运动员竞赛优势. ...

  2. 二分图带权匹配、最佳匹配与KM算法

    ---------------------以上转自ByVoid神牛博客,并有所省略. [二分图带权匹配与最佳匹配] 什么是二分图的带权匹配?二分图的带权匹配就是求出一个匹配集合,使得集合中边的权值之和 ...

  3. Luogu 1559 运动员最佳匹配问题(带权二分图最大匹配)

    Luogu 1559 运动员最佳匹配问题(带权二分图最大匹配) Description 羽毛球队有男女运动员各n人.给定2 个n×n矩阵P和Q.P[i][j]是男运动员i和女运动员j配对组成混合双打的 ...

  4. P1559 运动员最佳匹配问题[最大费用最大流]

    题目描述 羽毛球队有男女运动员各n人.给定2 个n×n矩阵P和Q.P[i][j]是男运动员i和女运动员j配对组成混合双打的男运动员竞赛优势:Q[i][j]是女运动员i和男运动员j配合的女运动员竞赛优势 ...

  5. UVALive 4043 Ants 蚂蚁(二分图最佳完美匹配,KM算法)

    题意: 有n个蚂蚁n棵树,蚂蚁与树要配对,在配对成功的一对之间连一条线段,要求所有线段不能相交.按顺序输出蚂蚁所匹配的树. 思路: 这个题目真是技巧啊,不能用贪心来为每个蚂蚁选择最近的树,这样很可能是 ...

  6. [洛谷 P1559] 运动员最佳匹配问题

    题目描述 羽毛球队有男女运动员各n人.给定2 个n×n矩阵P和Q.P[i][j]是男运动员i和女运动员j配对组成混合双打的男运动员竞赛优势:Q[i][j]是女运动员i和男运动员j配合的女运动员竞赛优势 ...

  7. P1559 运动员最佳匹配问题

    题目描述 羽毛球队有男女运动员各n人.给定2 个n×n矩阵P和Q.P[i][j]是男运动员i和女运动员j配对组成混合双打的男运动员竞赛优势:Q[i][j]是女运动员i和男运动员j配合的女运动员竞赛优势 ...

  8. [Luogu 1559]运动员最佳匹配问题

    Description 题库链接 求 \(2\times N\) 个点的带权二分图最佳匹配. \(1\leq N\leq 20\) Solution 我还是太菜了啊...到现在才学 \(KM\) . ...

  9. HDU 3488 Tour (最大权完美匹配)【KM算法】

    <题目链接> 题目大意:给出n个点m条单向边边以及经过每条边的费用,让你求出走过一个哈密顿环(除起点外,每个点只能走一次)的最小费用.题目保证至少存在一个环满足条件. 解题分析: 因为要求 ...

随机推荐

  1. .net 音频转换 .amr 转 .mp3 (ffmpeg转换法)

    最近看来是跟声音干上了啊! 音频转换的第二种方法,这种方法相对第一种来说,要简单的多! 首先,你得下载个“ffmpeg.exe” 插件,然后把它放到你的项目中,如下图: 程序中会调用该文件,以助于转换 ...

  2. AJPFX关于学习java遇到的问题:对算法和数据结构不熟悉

    为什么我先拿“数据结构和算法”说事捏?这玩意是写程序最最基本的东东.不管你使用 Java 还是其它的什么语言,都离不开它.而且这玩意是跨语言的,学好之后不管在哪门语言中都能用得上. 既然“数据结构和算 ...

  3. Deprecated: Assigning the return value of new by reference is deprecated in报错

    出现了Deprecated: Assigning the return value of new by reference is deprecated in wwwroot\common.inc.ph ...

  4. mongoDB学习初步总结

    What? 最受欢迎的非关系型数据库之一.面向文档的数据库,在存储乎数据方面与关系型数据库有着本质的区别. Why? 简单易用 对多变的业务需求,适应性强于SQL型DB 性能 复制 索引 分片 丰富的 ...

  5. 安装scount的es驱动,composer require tamayo/laravel-scout-elastic报错解决

    执行 composer require tamayo/laravel-scout-elastic 报错信息如下: Problem 1 - Installation request for tamayo ...

  6. 洛谷 P1955 程序自动分析

    题目描述 在实现程序自动分析的过程中,常常需要判定一些约束条件是否能被同时满足. 考虑一个约束满足问题的简化版本:假设x1,x2,x3...代表程序中出现的变量,给定n个形如xi=xj或xi≠xj的变 ...

  7. Python 学习日志9月21日

    9月21日 周四 今天是个特殊的日子吗,总感觉9月21这个日子听着怪怪的. 今天早晨看<Head First HTML and CSS>第13章节“表格和更多列表”,内容不多,看完并做了详 ...

  8. leetcode_919. Complete Binary Tree Inserter_完全二叉树插入

    https://leetcode.com/problems/complete-binary-tree-inserter/ 给出树节点的定义和完全二叉树插入器类的定义,为这个类补全功能.完全二叉树的定义 ...

  9. typescript知识教程

    https://ts.xcatliu.com/basics/type-of-function.html

  10. Qt_为什么学习Qt

    1)学习GUI编程,市场上任何一款产品几乎都带有图形界面,市场上很火的Androoid.IOS编程无非也是GUI app编程,GUI编程都是差不多的,学习Qt后再学习ANdroid IOS ,那都是S ...