T66597 小xzy的任务

题目背景

今天,小xzy的班主任交给他一个严肃的任务,匹配羽毛球运动员! ! !

题目描述

羽毛球队有男女运动员各n人。给定2个n×n矩阵P和Q。Pij​是男运动员i和女运动员j配对组成混合双打的男运动员竞赛优势;Qij​是女运动员ii和男运动员j配合的女运动员竞赛优势。由于技术配合和心理状态等各种因素影响,Pij​不一定等于Qji​。男运动员ii和女运动员jj配对组成混合双打的男女双方竞赛优势为Pij​∗Qji​。设计一个算法,计算男女运动员最佳配对法,使各组男女双方竞赛优势的总和达到最大。

编程任务

设计一个算法,对于给定的男女运动员竞赛优势,计算男女运动员最佳配对法,使各组男女双方竞赛优势的总和达到最大。

输入输出格式

输入格式:

第一行有1 个正整数n (2≤n≤1000)。接下来的2n行,每行n个数。前n行是p,后n行是q。

输出格式:

一个整数,计算出的男女双方竞赛优势的总和的最大值。

输入输出样例

输入样例#1:

3
10 2 3
2 3 4
3 4 5
2 2 2
3 5 3
4 5 1

输出样例#1:

52

说明

0≤n≤1000,0≤Pij​,Qij​≤1000

第一个测试点:n≤100

这题我们把男运动员和女运动员看成两个集合,于是这题便可以看成是带权二分图匹配。

带权二分图匹配通常使用KM算法。

不了解KM算法的请移步。

code:

#include <cstdio>
const int MAXN=2005;
const int INF=0x3f3f3f3f;
int n,now=0;
int rela[MAXN][MAXN],match[MAXN];
int ex_boy[MAXN],ex_girl[MAXN],slack[MAXN];
int vis_boy[MAXN],vis_girl[MAXN];
int boy[MAXN][MAXN],girl[MAXN][MAXN];void read(int &x)
{int out=1;char c;x=0;while(c<'0' || c>'9'){if(c=='-')out=-1;c=getchar();}while(c>='0'&&c<='9'){x=x*10+c-48;c=getchar();}x=x*out;
}void write(long long x)
{if(x>10)write(x/10);putchar(x%10+48);
}void init()
{read(n);for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)read(boy[i][j]);for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)read(girl[i][j]);for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)rela[i][j]=boy[i][j]*girl[j][i];
}int dfs(int x)
{int cp;vis_girl[x]=now;for(int y=1;y<=n;y++){if(vis_boy[y]==now)continue;cp=ex_girl[x]+ex_boy[y]-rela[x][y];if(cp==0){vis_boy[y]=now;if((match[y]==0)||dfs(match[y])){match[y]=x;return true;}}else if(cp<slack[y])slack[y]=cp;}return false;
}long long KM()
{for(int i=1;i<=n;i++){match[i]=ex_girl[i]=ex_boy[i]=0;for(int j=1;j<=n;j++)if(rela[i][j]>ex_girl[i])ex_girl[i]=rela[i][j];} for(int i=1;i<=n;i++){now=0;for(int j=1;j<=n;j++){slack[j]=INF;vis_boy[j]=vis_girl[j]=0;}while(1){now++;if(dfs(i))break;int d=INF;for(int j=1;j<=n;j++)if(vis_boy[j]!=now&&slack[j]<d)d=slack[j];for(int j=1;j<=n;j++){if(vis_girl[j]==now)ex_girl[j]-=d;if(vis_boy[j]==now)ex_boy[j]+=d;else slack[j]-=d;}}}long long res=0;for(int i=1;i<=n;i++)res+=rela[match[i]][i];return res;
}int main()
{init();write(KM());return 0;
}

  

转载于:https://www.cnblogs.com/lzxzy-blog/p/xinzhaoyang.html

T66597 小xzy的任务 题解相关推荐

  1. T66099 小xzy的数对 题解

    T66099 小xzy的数对 题目背景 老师带同学参加表演,要求学生两两一组表演,但有些学生一起会发生冲突,现在老师想知道有多少组学生分到一起时不会发生冲突. 题目描述 学生发生冲突当且仅当他们身上的 ...

  2. 【10.28 校内普及组】 小B浇花 题解

    [10.28 校内普及组] 小B浇花 题解 题目 解题思路 排个序 如果当前的高度小于等于上一个 答案累加上一高度-当前高度+1 代码 #include<algorithm> #inclu ...

  3. 小浩算法-java题解(二分篇)

    小浩算法-java题解-二分篇 二分篇 第875题:阿珂喜欢吃香蕉 第69题:x的平方根 第278题:第一个错误的版本 第153题:旋转排序数组最小值Ⅰ 第154题:旋转排序数组最小值Ⅱ 第475题: ...

  4. [SHOI2008]小约翰的游戏 题解

    题目 小约翰经常和他的哥哥玩一个非常有趣的游戏:桌子上有n堆石子,小约翰和他的哥哥轮流取石子,每个人取的时候,可以随意选择一堆石子,在这堆石子中取走任意多的石子,但不能一粒石子也不取,我们规定取到最后 ...

  5. P1335 [NOI2013] 小Q的修炼 题解

    感觉这种题答都没有题解,而我又想在这里保存一下代码,就写一份题解咯. [题意] 一共有M个变量. 有一系列的操作,按顺序标为1~N.操作分为三种: ①普通操作:将一个变量加上一个量. ②条件跳转:给出 ...

  6. 【NOIP模拟题】【DP】【LIS】【中缀表达式】2016.11.15 第一题 小L的二叉树 题解

    小L的二叉树 小L的二叉树 题目背景 勤奋又善于思考的小L接触了信息学竞赛,开始的学习十分顺利.但是,小L对数据结构的掌握实在十分渣渣. 所以,小L当时卡在了二叉树. [题目描述] 在计算机科学中,二 ...

  7. 【NOIP模拟题】【DP】【同余最短路】【暴力剪枝】2016.11.15 第二题 小L的牛栏 题解

    小L的牛栏 [题目描述] 小L通过泥萌的帮助,成功解决了二叉树的修改问题,并因此写了一篇论文, 成功报送了叉院(羡慕不?).勤奋又勤思的他在研究生时期成功转系,考入了北京大学光华管理学院!毕业后,凭着 ...

  8. 洛谷3672:小清新签到题——题解

    https://www.luogu.org/problemnew/show/P3672 题目见上面. 参考:https://www.cnblogs.com/candy99/p/6582699.html ...

  9. P1234 小A的口头禅题解

    一道很水的题目 题目链接 依题意,输出hehe的总数 情况有以下几种: 1.hehe 2.eheh 3. h e h e 4. e h e h(不要忽略后两种) 然后快乐地模拟就好了 注意循环条件 上 ...

最新文章

  1. Java项目:晚会抽奖系统(java+Jdbc+Servlet+Ajax+mysql)
  2. python 仪表盘-跟小白学Python数据分析——绘制仪表盘
  3. Animation Property Animation 使用
  4. 大工17秋《计算机文化基础》在线测试1,奥鹏大工15秋《计算机文化基础》在线测试1答案...
  5. VNC 远程控制工具软件
  6. 查找指定时间段内的文件
  7. C++的Memcpy与Memcpy_s函数解析
  8. 东南大学 软件工程 复试3门科目历年真题 思维导图整理(软件工程/数据库/计算机网络)
  9. Chrome浏览器浅析
  10. TAGE Branch Predictor/分支预测
  11. 清华大学计算机系学几年,清华大学16位学霸简历吓坏网友
  12. python from win32com import client 出现弹框 隐藏模块中出现编译错误
  13. 专家:大数据正成为促进经济转型新动能
  14. controller 之@...
  15. SQL Server 使用数据库发送邮件(sp_send_dbmail)
  16. 【视频聊天】背后的秘密
  17. 51单片机串口通信实操(中断函数)
  18. 【自然语言处理-1】TF-IDF简单最实用的关键词提取技术
  19. 用excel图表误差线显示均值和标准差(转)
  20. vue + router 权限管理 不同角色显示不同路由

热门文章

  1. ios沙箱模式开启_ios的应用沙箱运行是怎么一回事
  2. Java编程思想笔记——容器深入研究1
  3. cx_freeze打包python3.6成exe/msi应用
  4. linux 交换机硬件监控,zabbix5.0监控华为交换机,添加自定义监控项
  5. 放弃python选r_无需纠结R还是Python
  6. 计算机模拟退火算法,模拟退火算法
  7. Stable与PreSale版本同时在线的一些思考
  8. Android也谈android和多屏幕适配
  9. Thinkphp 5.1开源商城系统 开源社区O2O 类似美团 支持社区配送 wstmall小程序
  10. 智能汽车专题报告之软件篇:迈向SOA软件架构