【bzoj4950】[Wf2017]Mission Improbable 二分图最大匹配
2018-01-14 20:00
495 查看
Description
那是春日里一个天气晴朗的好日子,你准备去见见你的老朋友Patrick,也是你之前的犯罪同伙。Patrick在编程竞赛
上豪赌输掉了一大笔钱,所以他需要再干一票。为此他需要你的帮助,虽然你已经金盆洗手了。你刚开始很不情愿,
因为你一点也不想再回到那条老路上了,但是你觉得听一下他的计划也无伤大雅。在附近的一个仓库里有一批货物,
包含一些贵重的消费性部件,Patrick企图从中尽可能多地偷些东西出来。这意味着要找一条进去的路,弄晕安保人
员,穿过各种各样的激光射线,你懂的,都是常见的抢劫技术。然而,仓库的核心装备了一套Patrick搞不定的安保系
统。这也是他需要你帮助他的地方。这批货物被放置在一些巨大的立方体箱里,每个箱子的尺寸都是相同的。这些
箱子堆放成许多整齐的堆,每个箱子可以表示成一个三维的网格。安保系统每个小时会用三台相机对这堆货物进行
一次拍照,相机分别为:前置相机(front camera),侧置相机(side camera)和顶置相机(top camera)。前置相机的照
片显示了每一行最高的那堆箱子的高度,侧置相机显示了每一列最高的那堆箱子的高度,顶置相机显示了每个位置是
否存在一堆箱子。如果安保系统发现任何一张照片出现了变化,它会立即拉响警报。一旦 Patrick 进去了,他会确
定每堆箱子的高度并且发给你。图1显示了一种网格可能的放置,以及每台相机会得到的视图。
图 1. 网格的高度值与对应的相机视图。
图 2. 洗劫后网格可能的高度值。
Patrick想尽可能多偷走一些箱子。由于他不能弄坏安保系统,他准备重新安排剩余每堆箱子的放置,使得下一次相
机取像时会得到相同的照片,从而骗过安保系统。在上面的例子中,他可以偷走九个箱子。图2显示了一种可能的剩
余箱子的安置方案能使得安保系统认为与原安置情况相同。Patrick想请你帮他确定在保证能骗过安保系统的情况
下他最多能偷走多少个箱子。你会帮他干完这最后一票么?
Input
第一行包含两个整数r(1≤r≤100)和c(1≤n≤100),分别表示网格的行数与列数。
接下来r行,每行包含c个整数,表示对应行上每堆立方体箱的高度(箱子的数量)。
所有的高度在0到10^9之间 (含边界) 。
Output
输出在不被发现的情况下最多能偷走多少箱子。
Sample Input
样例1
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
样例1
9
样例2
30
题解
我们把每一个都取成高度为1。然后放回每一行每一列的最大高度。
如果i行与j列最大高度相同,则有可能放在[i,j]使得只
4000
需放回一个最大值,但要满足[i,j]之前放有箱子。
代码
那是春日里一个天气晴朗的好日子,你准备去见见你的老朋友Patrick,也是你之前的犯罪同伙。Patrick在编程竞赛
上豪赌输掉了一大笔钱,所以他需要再干一票。为此他需要你的帮助,虽然你已经金盆洗手了。你刚开始很不情愿,
因为你一点也不想再回到那条老路上了,但是你觉得听一下他的计划也无伤大雅。在附近的一个仓库里有一批货物,
包含一些贵重的消费性部件,Patrick企图从中尽可能多地偷些东西出来。这意味着要找一条进去的路,弄晕安保人
员,穿过各种各样的激光射线,你懂的,都是常见的抢劫技术。然而,仓库的核心装备了一套Patrick搞不定的安保系
统。这也是他需要你帮助他的地方。这批货物被放置在一些巨大的立方体箱里,每个箱子的尺寸都是相同的。这些
箱子堆放成许多整齐的堆,每个箱子可以表示成一个三维的网格。安保系统每个小时会用三台相机对这堆货物进行
一次拍照,相机分别为:前置相机(front camera),侧置相机(side camera)和顶置相机(top camera)。前置相机的照
片显示了每一行最高的那堆箱子的高度,侧置相机显示了每一列最高的那堆箱子的高度,顶置相机显示了每个位置是
否存在一堆箱子。如果安保系统发现任何一张照片出现了变化,它会立即拉响警报。一旦 Patrick 进去了,他会确
定每堆箱子的高度并且发给你。图1显示了一种网格可能的放置,以及每台相机会得到的视图。
图 1. 网格的高度值与对应的相机视图。
图 2. 洗劫后网格可能的高度值。
Patrick想尽可能多偷走一些箱子。由于他不能弄坏安保系统,他准备重新安排剩余每堆箱子的放置,使得下一次相
机取像时会得到相同的照片,从而骗过安保系统。在上面的例子中,他可以偷走九个箱子。图2显示了一种可能的剩
余箱子的安置方案能使得安保系统认为与原安置情况相同。Patrick想请你帮他确定在保证能骗过安保系统的情况
下他最多能偷走多少个箱子。你会帮他干完这最后一票么?
Input
第一行包含两个整数r(1≤r≤100)和c(1≤n≤100),分别表示网格的行数与列数。
接下来r行,每行包含c个整数,表示对应行上每堆立方体箱的高度(箱子的数量)。
所有的高度在0到10^9之间 (含边界) 。
Output
输出在不被发现的情况下最多能偷走多少箱子。
Sample Input
样例1
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
样例1
9
样例2
30
题解
我们把每一个都取成高度为1。然后放回每一行每一列的最大高度。
如果i行与j列最大高度相同,则有可能放在[i,j]使得只
4000
需放回一个最大值,但要满足[i,j]之前放有箱子。
代码
#include<cstdio> #include<iostream> #include<cstring> #include<algorithm> #include<cmath> #include<vector> #define ll long long #define mod 10000007 using namespace std; inline int read() { int x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();} while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();} return x*f; } ll ans; int n,m,mxn[105],mxm[105],flag[105],match[105],T,a[105][105]; vector<int>e[105]; bool find(int now) { for (int i=0;i<e[now].size();i++) { if (flag[e[now][i]]==T) continue; flag[e[now][i]]=T; if (!match[e[now][i]]||find(match[e[now][i]])) { match[e[now][i]]=now; return 1; } } return 0; } int main() { n=read();m=read(); for (int i=1;i<=n;i++) for (int j=1;j<=m;j++) { a[i][j]=read();if (a[i][j]) ans+=a[i][j]-1; mxn[i]=max(mxn[i],a[i][j]);mxm[j]=max(mxm[j],a[i][j]); } for (int i=1;i<=n;i++) if (mxn[i]) ans-=mxn[i]-1; for (int i=1;i<=m;i++) if (mxm[i]) ans-=mxm[i]-1; for (int i=1;i<=n;i++) for (int j=1;j<=m;j++)if (mxn[i]==mxm[j]&&a[i][j])e[i].push_back(j); for (int i=1;i<=n;i++) { T=i;if (find(i)) ans+=mxn[i]-1; } cout<<ans; return 0; }
相关文章推荐
- bzoj4950 [Wf2017]Mission Improbable(二分图最大匹配)
- BZOJ 4950 Mission Improbable (二分图最大匹配)
- 【BZOJ4950】lydsy七月月赛 C 二分图最大匹配
- BZOJ 4950 [Wf 2017] 二分图最大匹配 解题报告
- bzoj 4950(二分图最大匹配)
- 【bzoj4950】【 [Wf2017]Mission Improbable】贪心+二分图匹配
- [BZOJ]4950 二分图 + 最大匹配
- 【bzoj4950】【 [Wf2017]Mission Improbable】贪心+二分图匹配
- 【bzoj1059】[ZJOI2007]矩阵游戏 二分图最大匹配
- BZOJ 4819: [Sdoi2017]新生舞会 01分数规划 二分图最大权匹配(KM算法)/费用流
- BZOJ 2744 HEOI2012 朋友圈 二分图最大匹配
- BZOJ 1191 HNOI 2006 超级英雄Hero 二分图最大匹配
- [BZOJ 2150]部落战争(最小路径覆盖、二分图最大匹配)
- [BZOJ 1854][SCOI 2010]游戏(二分图最大匹配)
- 4950: [Wf2017]Mission Improbable
- BZOJ 2150 部落战争 最小路径覆盖 二分图最大匹配
- BZOJ 1059 [ZJOI2007]矩阵游戏 (二分图最大匹配)
- 【二分图】【最大匹配】【匈牙利算法】bzoj1191 [HNOI2006]超级英雄Hero
- bzoj2744 [HEOI2012]朋友圈 二分图大匹配——最大独立集
- [bzoj 1059][ZJOI 2007]矩阵游戏(二分图最大匹配)