bzoj4950(二分图最大匹配)
[Wf2017]Mission Improbable
Time Limit: 1 Sec Memory Limit: 1024 MB
Submit: 105 Solved: 49
[Submit][Status][Discuss]
Description
Input
Output
Sample Input
5 5
1 4 0 5 2
2 1 2 0 1
0 2 3 4 4
0 3 0 3 1
1 2 2 1 1
样例2
2 3
50 20 3
20 10 3
Sample Output
9
样例2
30
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<cmath> 5 #include<algorithm> 6 #define MAXN 100000+10 7 using namespace std; 8 typedef long long LL; 9 struct ed{LL v,next;}edge[MAXN]; 10 LL match[220],head[220],vis[220],n,m; 11 LL map[220][220],sum=0,mh[220],ml[220]; 12 void add(LL u,LL v){ 13 static LL tot=0; 14 edge[++tot].v=v; 15 edge[tot].next=head[u]; 16 head[u]=tot; 17 } 18 bool dfs(LL u){ 19 for(LL i=head[u];i;i=edge[i].next){ 20 LL v=edge[i].v; 21 if(vis[v])continue; 22 vis[v]=1; 23 if(!match[v]||dfs(match[v])){ 24 match[v]=u; 25 return true; 26 } 27 } 28 return false; 29 } 30 int main(){ 31 scanf("%lld%lld",&n,&m); 32 for(LL i=1;i<=n;i++) 33 for(LL j=1;j<=m;j++){ 34 scanf("%lld",&map[i][j]); 35 mh[i]=max(mh[i],map[i][j]); 36 ml[j]=max(ml[j],map[i][j]); 37 if(map[i][j])sum+=map[i][j]-1; 38 } 39 for(LL i=1;i<=n;i++) 40 for(LL j=1;j<=m;j++) 41 if(mh[i]&&map[i][j]&&mh[i]==ml[j])add(i,n+j); 42 for(LL i=1;i<=n;i++)if(mh[i])sum-=mh[i]-1; 43 for(LL i=1;i<=m;i++)if(ml[i])sum-=ml[i]-1; 44 for(LL i=1;i<=n;i++){ 45 memset(vis,0,sizeof(vis)); 46 if(mh[i]&&dfs(i))sum+=mh[i]-1; 47 } 48 printf("%lld",sum); 49 return 0; 50 }
转载于:https://www.cnblogs.com/fengzhiyuan/p/7717503.html
bzoj4950(二分图最大匹配)相关推荐
- 【网络流24题】解题报告:A、飞行员配对方案问题(最大流求二分图最大匹配)
A.飞行员配对方案问题 (二分图最大匹配)(最大流)[提高+/省选- ] 题目链接 [问题分析] 二分图最大匹配问题. [建模方法] 在二分图的基础上增加源S和汇T. 1.S向X集合中每个顶点连一条容 ...
- 【模板】匈牙利算法 二分图最大匹配题模板
[任务] 给定一个二分图,用匈牙利算法求这个二分图的最大匹配数. [说明] 求最大匹配,那么我们希望每一个在左边的点都尽量找到右边的一个点和它匹配. 我们一次枚举左边的点x的所有出边指向的点y, 若y ...
- 51nod 2006 飞行员配对(二分图最大匹配) 裸匈牙利算法 求二分图最大匹配题
题目: 题目已经说了是最大二分匹配题, 查了一下最大二分匹配题有两种解法, 匈牙利算法和网络流. 看了一下觉得匈牙利算法更好理解, 然后我照着小红书模板打了一遍就过了. 匈牙利算法:先试着把没用过的左 ...
- 2021牛客多校3 - Minimum grid(二分图最大匹配-最大流)
题目链接:点击查看 题目大意:给出一个 n∗nn*nn∗n 的棋盘,其中有 mmm 个位置是需要填数字的位置,每个位置需要填 [0,k][0,k][0,k] 的数字中的其中一个,可以重复,现在给出每一 ...
- HDU - 1054 Strategic Game(最小点覆盖-二分图最大匹配)
题目链接:点击查看 题目大意:给出一棵树,现在要在节点上放置士兵,每个士兵可以监视与其所在的节点直接相连的节点,问最少需要多少个士兵才能将整棵树都监视到 题目分析:求最少的节点,以保证每条边都有一个端 ...
- HDU - 2389 Rain on your Parade(Hopcroft-Krap算法求二分图最大匹配)
题目链接:点击查看 题目大意:给出n个人和m个雨伞,t分钟后就要下雨了,现在给出每个人的坐标和速度,以及雨伞所在的坐标,每个雨伞只能容纳一个人,题目问最多有多少个人能不被淋到 题目分析:二分图最大匹配 ...
- POJ - 2226 Muddy Fields(最小点覆盖-二分图最大匹配)
题目链接:点击查看 题目大意:给出一个n*m的地图,地图中'*'代表泥地,'.'代表空地,现在我们有两种木板,一种可以覆盖一行中的任意长度,我们成为行木板,另一种可以覆盖一列中的任意长度,我们成为列木 ...
- HDU - 1528 Card Game Cheater(二分图最大匹配)
题目链接:点击查看 题目大意:题意有点像求田忌赛马的最优解,大概意思就是现在有两个人,每个人都有n张不同的扑克牌,扑克牌的大小首先以点数来确定,点数相同的情况下以花色来决定,红桃(Heart)> ...
- HDU - 1150 Machine Schedule(最小点覆盖-二分图最大匹配)
题目链接:点击查看 题目大意:现在有一个机器A和一个机器B,A机器有n种模式,B机器有m种模式,现在有k次工作需要完成,每次工作的信息为: id x y:编号为id,在A机器要用x模式完成,在B机器要 ...
最新文章
- 软件评测-信息安全-应用安全-资源控制-用户登录限制(中)
- ASP.NET Core -中间件(Middleware)使用
- 4.mysql数据库创建,表创建模等模板脚本,mysql_SQL99标准的连接查询(内连接,外连接,满外连接,交叉连接)
- php serialize mysql_php 序列化(serialize)格式详解
- 神经网络模型遇到瓶颈?这些Tricks让你相见恨晚!
- Android应用程序消息处理机制
- 入门机器学习(八)--神经网络参数的反向传播算法
- 202.linux系统相关函数
- Qt实现Linux下模拟点击界面,如何利用QT实现模拟鼠标点击?
- mfc gridctrl 设置某列自动伸长_三明桥梁智能张拉设备数控智能张拉系统全自动智能张拉系统...
- 自动检测技术学习心得体会_公司参加中机建设首届BIM技术应用培训班人员顺利结业...
- 缓存-问题:缓存穿透 缓存雪崩 缓存击穿
- HTML+JS实现可编辑表格
- rbf神经网络python预测代码_RBF神经网络预测
- 2D纸娃娃系统的web演示
- Tableau官方文档翻译(一):Measures和Dimensions的区别
- pyqtgraph的plotItem的轴刻度设置/轴刻度值风格设置
- Android的屏幕适配
- java根据url获取pdf流_从URL获取动态创建的PDF
- 条码固定资产管理PDA应用
热门文章
- 【51Nod - 1270】数组的最大代价(dp,思维)
- html写原生曲线图,HTML5 平滑的正弦波曲线图
- cass生成曲线要素文件_几种常见的CASS字体异常问题,教你如何解决
- java.lang.ClassNotFoundException: org.springframework.web.util.IntrospectorCleanupListener
- 怎样提高WebService性能大数据量网络传输处理(转)
- leetcode283. 移动零 比官方更好的解法。
- 数据结构课上笔记13
- 对于linux socket与epoll配合相关的一些心得记录
- C++ 使用move来删除用户指定的文件
- Java JUC工具类--Exchanger