洛谷传送门

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

裸的km算法。

注意开long long。

 #include <cstdio>
#include <cstring>
#include <iostream> using namespace std; const long long INF = ;
int n, match[];
long long p[][], q[][], love[][], ex_boy[], ex_girl[], slack[];
bool vis_boy[], vis_girl[]; bool find(int i)
{
int j;
long long gap;
vis_girl[i] = ;
for(j = ; j <= n; j++)
{
if(vis_boy[j]) continue;
gap = ex_girl[i] + ex_boy[j] - love[i][j];
if(gap == )
{
vis_boy[j] = ;
if(match[j] == - || find(match[j]))
{
match[j] = i;
return ;
}
}
else slack[j] = min(slack[j], gap);
}
return ;
} long long KM()
{
int i, j;
long long d, ret = ;
memset(match, -, sizeof(match));
for(i = ; i <= n; i++)
for(j = ; j <= n; j++)
ex_girl[i] = max(ex_girl[i], love[i][j]);
for(i = ; i <= n; i++)
{
for(j = ; j <= n; j++) slack[j] = INF;
while()
{
memset(vis_boy, , sizeof(vis_boy));
memset(vis_girl, , sizeof(vis_girl));
if(find(i)) break;
d = INF;
for(j = ; j <= n; j++)
if(!vis_boy[j])
d = min(d, slack[j]);
for(j = ; j <= n; j++)
{
if(vis_boy[j]) ex_boy[j] += d;
if(vis_girl[j]) ex_girl[j] -= d;
}
}
}
for(i = ; i <= n; i++) ret += love[match[i]][i];
return ret;
} int main()
{
int i, j;
scanf("%d", &n);
for(i = ; i <= n; i++)
for(j = ; j <= n; j++)
scanf("%lld", &p[i][j]);
for(i = ; i <= n; i++)
for(j = ; j <= n; j++)
scanf("%lld", &q[i][j]);
for(i = ; i <= n; i++)
for(j = ; j <= n; j++)
love[i][j] = p[i][j] * q[j][i];
printf("%lld", KM());
return ;
}

运动员最佳匹配问题(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. mybatis通过插件方式实现读写分离

    原理:通过自定义mybatis插件,拦截Executor的update和query方法,检查sql中有select就用读的库,其它的用写的库(如果有调用存储过程就另当别论了) @Intercepts( ...

  2. Android手机屏幕投射到电脑神器Vysor

    做android开发的,经常要把手机屏幕投射到电脑,用来演示.普遍的解决方案是360或者豌豆荚的演示功能,缺点是延迟非常厉害,大概有3秒左右,非常影响演示效果.以下介绍Vysor,几乎0延迟,能与手机 ...

  3. TigerGraph REST++API

    简介 - 什么是REST ++? TigerGraph TM 系统使用着名的REpresentational State Transfer(REST)架构来管理与TigerGraph核心组件,图形处理 ...

  4. Python3 写入文件

    Demo: file = open("test.txt", "wb")file.write("string") 上面这段代码运行会报类型错误 ...

  5. 使用laravel的Command实现搜索引擎索引和模板的建立

    创建command,初始化es 创建成功后,可通过php artisan 查看到 php artisan make:command ESInit 安装guzzle composer require g ...

  6. COGS 1361. 树

    ★   输入文件:treed.in   输出文件:treed.out   简单对比时间限制:1 s   内存限制:128 MB [问题描述] 在一个凉爽的夏夜,xth和rabbit来到花园里砍树.为啥 ...

  7. how to use Hexo

    Hexo is a good tool to build a personal blog.Here are some good reference:1: https://hexo.io/zh-cn/d ...

  8. Dreamoon and MRT

    Dreamoon and MRT 题目链接: http://codeforces.com/group/gRkn7bDfsN/contest/212299/problem/B 只需要考虑相对位置,设a0 ...

  9. tree iview treeData json数据 添加 selected 数据 要进行vue.set 进行响应式添加

    tree iview treeData json数据 添加 selected 数据 要进行vue.set 进行响应式添加

  10. 解决VSCode中使用vetur插件格式化vue文件时,js代码会自动加上冒号和分号

    解决VSCode中使用vetur插件格式化vue文件时,js代码会自动加上冒号和分号 在设置中把"vetur.format.defaultFormatter.js": " ...