#6472. 「ICPC World Finals 2017」难以置信的任务 Mission Improbable
可以简化一下问题,假设Patrick把箱子都拿走但是原来有箱子的位置留下一个,现在要放箱子使得每行每列最大值都满足,最少放多少个。
设第\(i\)行的最大值是\(H(i)\),第\(i\)列的是\(W(i)\)。没有箱子的行可以不用去管,假设每行每列都有一个地方放\(H(i)/W(i)\),现在如果有一个\(H(i)=W(j)\),而且原来\((i,j)\)位置上有箱子,那么就可以在\((i,j)\)位置上放\(H(i)\)个箱子同时满足第\(i\)行与第\(j\)列,获得\(H(i)-1\)的收益。
这题就做完了,统一答案随便乱搞。
#include<bits/stdc++.h>
#define il inline
#define vd void
typedef long long ll;
il int gi(){
int x=0,f=1;
char ch=getchar();
while(!isdigit(ch)){
if(ch=='-')f=-1;
ch=getchar();
}
while(isdigit(ch))x=x*10+ch-'0',ch=getchar();
return x*f;
}
ll A[101][101],H[101],W[101];
int S,T,fir[210],dis[30010],nxt[30010],w[30010],id=1;
ll cost[30010];
il vd link(int a,int b,ll d){
nxt[++id]=fir[a],fir[a]=id,dis[id]=b,w[id]=1,cost[id]=d;
nxt[++id]=fir[b],fir[b]=id,dis[id]=a,w[id]=0,cost[id]=-d;
}
il bool Mincost(ll&total){
static ll dist[210];
static int que[210],hd,tl,lst[210];
static bool inq[210];
memset(dist,63,sizeof dist);
dist[S]=0;hd=tl=0;que[tl++]=S;inq[S]=1;
lst[T]=0;
while(hd^tl){
int x=que[hd];
for(int i=fir[x];i;i=nxt[i])
if(w[i]&&dist[dis[i]]>dist[x]+cost[i]){
dist[dis[i]]=dist[x]+cost[i],lst[dis[i]]=i;
if(!inq[dis[i]])inq[dis[i]]=1,que[tl++]=dis[i],tl%=210;
}
inq[x]=0,++hd,hd%=210;
}
for(int i=lst[T];i;i=lst[dis[i^1]])w[i]=0,w[i^1]=1,total-=cost[i];
return lst[T];
}
int main(){
int n=gi(),m=gi();
ll ans=0;
for(int i=1;i<=n;++i)
for(int j=1;j<=m;++j){
A[i][j]=gi();
if(A[i][j])ans+=A[i][j]-1;
H[i]=std::max(H[i],A[i][j]);
W[j]=std::max(W[j],A[i][j]);
}
for(int i=1;i<=n;++i)if(H[i])ans-=H[i]-1;
for(int i=1;i<=m;++i)if(W[i])ans-=W[i]-1;
S=0,T=n+m+1;
for(int i=1;i<=n;++i)link(S,i,0);
for(int i=1;i<=m;++i)link(i+n,T,0);
for(int i=1;i<=n;++i)
for(int j=1;j<=m;++j)
if(A[i][j]&&H[i]==W[j]&&H[i])link(i,n+j,-H[i]+1);
while(Mincost(ans));
printf("%lld\n",ans);
return 0;
}
#6472. 「ICPC World Finals 2017」难以置信的任务 Mission Improbable的更多相关文章
- Solution -「LOJ #6029」「雅礼集训 2017」市场
\(\mathcal{Description}\) Link. 维护序列 \(\lang a_n\rang\),支持 \(q\) 次如下操作: 区间加法: 区间下取整除法: 区间求最小值: 区 ...
- LOJ_6045_「雅礼集训 2017 Day8」价 _最小割
LOJ_6045_「雅礼集训 2017 Day8」价 _最小割 描述: 有$n$种减肥药,$n$种药材,每种减肥药有一些对应的药材和一个收益. 假设选择吃下$K$种减肥药,那么需要这$K$种减肥药包含 ...
- Loj #2331. 「清华集训 2017」某位歌姬的故事
Loj #2331. 「清华集训 2017」某位歌姬的故事 IA 是一名会唱歌的女孩子. IOI2018 就要来了,IA 决定给参赛选手们写一首歌,以表达美好的祝愿.这首歌一共有 \(n\) 个音符, ...
- Loj #2324. 「清华集训 2017」小 Y 和二叉树
Loj #2324. 「清华集训 2017」小 Y 和二叉树 小Y是一个心灵手巧的OIer,她有许多二叉树模型. 小Y的二叉树模型中,每个结点都具有一个编号,小Y把她最喜欢的一个二叉树模型挂在了墙上, ...
- Loj #2321. 「清华集训 2017」无限之环
Loj #2321. 「清华集训 2017」无限之环 曾经有一款流行的游戏,叫做 *Infinity Loop***,先来简单的介绍一下这个游戏: 游戏在一个 \(n \times m\) 的网格状棋 ...
- Loj 2320.「清华集训 2017」生成树计数
Loj 2320.「清华集训 2017」生成树计数 题目描述 在一个 \(s\) 个点的图中,存在 \(s-n\) 条边,使图中形成了 \(n\) 个连通块,第 \(i\) 个连通块中有 \(a_i\ ...
- 「Mobile Testing Summit China 2017」第三届中国移动互联网测试开发大会-讲师征集
时至北京盛夏,一场由 TesterHome 主办的关于移动互联网测试技术的盛会正在紧锣密鼓的筹备中.只要你关注软件质量,热爱测试,期待学习,都欢迎你加入这次移动测试技术大会中和我们一起分享经验.探讨话 ...
- 「雅礼集训 2017 Day7」事情的相似度
「雅礼集训 2017 Day7」事情的相似度 题目链接 我们先将字符串建后缀自动机.然后对于两个前缀\([1,i]\),\([1,j]\),他们的最长公共后缀长度就是他们在\(fail\)树上对应节点 ...
- 「THUSCH 2017」大魔法师 解题报告
「THUSCH 2017」大魔法师 狗体面太长,帖链接了 思路,维护一个\(1\times 4\)的答案向量表示\(A,B,C,len\),最后一个表示线段树上区间长度,然后每次的操作都有一个转移矩阵 ...
随机推荐
- iOS设计模式 - 责任链
iOS设计模式 - 责任链 原理图 说明 在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链.请求在这个链上传递,直到链上的某一个对象决定处理此请求.发出这个请求的客户端并不知道链 ...
- 铁乐学python_Day42_线程池
铁乐学python_Day42_线程池 concurrent.futures 异步调用模块 concurrent.futures模块提供了高度封装的异步调用接口 ThreadPoolExecutor: ...
- JS和css实现检测移动设备方向的变化并判断横竖屏幕
这篇文章主要介绍了JS和css实现检测移动设备方向的变化并判断横竖屏幕,本文分别给出实现代码,需要的朋友可以参考下 方法一:用触发手机的横屏和竖屏之间的切换的事件 [自测可用, chrome , 手 ...
- vue 项目项目启动时由于EsLint代码校验报错
今天在编写好vue项目代码时,在命令行输入npm start的时候出现了如下图所示的一大堆错误: 在网上查找资料说是缺少EsLint配置文件的问题,最终找到一篇由 hahazexia 编写的一篇博客文 ...
- 3DES加解密 C语言
3DES(或称为Triple DES),它相当于是对每个数据块应用三次DES加密算法.3*8字节密钥. 设Ek()和Dk()代表DES算法的加密和解密过程,K代表DES算法使用的密钥,P代表明文,C代 ...
- 三层架构搭建(asp.net mvc + ef)
第一次写博客,想了半天先从简单的三层架构开始吧,希望能帮助到你! 简单介绍一下三层架构, 三层架构从上到下分:表现层(UI),业务逻辑层(BLL),数据访问层(DAL)再加上数据模型(Model),用 ...
- block本质探寻三之block类型
一.oc代码 提示:看本文章之前,最好按顺序来看: //代码 void test1() { ; void(^block1)(void) = ^{ NSLog(@"block1----&quo ...
- 「iOS」你会用几种方法实现计时器
1.NSTimer 存在一定的误差,不管是一次性的还是周期性的timer得实际触发事件的时间,都会与所加入的runloop和runloopMode有关,如果此runloop正在执行一个连续性的运算,t ...
- PCL利用RANSAC自行拟合分割平面
利用PCL中分割算法. pcl::SACSegmentation<pcl::PointXYZ> seg; ,不利用法线参数,只根据模型参数得到的分割面片,与想象的面片差距很大, pcl:: ...
- 什么是websoket
概念 HTML5作为下一代WEB标准,拥有许多引人注目的新特性,如Canvas.本地存储.多媒体编程接口.WebSocket 等等.今天我们就来看看具有“Web TCP”之称的WebSocket. W ...