CF1198E Rectangle Painting 2(最小割 思维
这个题主要是转化为最小割的思路不好想到。
大意:给你一个大的正方形,有的点黑,有的点白,要把黑染白,你每次可以选一个矩形染色,代价是min(长,宽),问最小代价。
思路:对于一个要染色的块来说,他要被行覆盖或列覆盖(选小的),就是min(占行数,占列数)。然后可以这样建网络流:源点->行结点(容量是占行数)->无穷大的边->列结点(容量是占列数)->汇点,然后跑最小割(最大流)。
#include<bits/stdc++.h>
#define M 405
using namespace std;
const int inf=1e9;
int n,m,s,t,h[M],tt=1;
struct node{int x1,y1,x2,y2;}A[M];
bool eg[M][M];
int B1[M*M],b1,B2[M*M],b2;
struct edge{int nxt,to,co;}G[M*M];
void Add(int a,int b,int c){
if(eg[a][b])return;
G[++tt]=(edge){h[a],b,c};
h[a]=tt;
eg[a][b]=1;
}
int dep[M],cur[M];
queue<int>Q;
bool bfs(){
memset(dep,-1,sizeof(dep));
for(int i=s;i<=t;i++)cur[i]=h[i];
while(!Q.empty())Q.pop();
Q.push(s);dep[s]=0;
while(!Q.empty()){
int x=Q.front();Q.pop();
for(int i=h[x];i;i=G[i].nxt){
int u=G[i].to,c=G[i].co;
if(dep[u]!=-1||!c)continue;
dep[u]=dep[x]+1;
if(u==t)return 1;
Q.push(u);
}
}
return 0;
}
int dfs(int x,int mi){
if(x==t||!mi)return mi;
int rlow=0,used=0;
for(int& i=cur[x];i;i=G[i].nxt){
int u=G[i].to,c=G[i].co;
if(dep[u]!=dep[x]+1||!c)continue;
if(rlow=dfs(u,min(c,mi-used))){
used+=rlow;
G[i].co-=rlow;
G[i^1].co+=rlow;
if(used==mi)break;
}
}
return used;
}
int ans=0;
void Dinic(){
while(bfs())ans+=dfs(s,inf);
}
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++){
scanf("%d%d%d%d",&A[i].x1,&A[i].y1,&A[i].x2,&A[i].y2);
B1[++b1]=A[i].x1;B1[++b1]=++A[i].x2;
B2[++b2]=A[i].y1;B2[++b2]=++A[i].y2;
}
B1[++b1]=B2[++b2]=n+1;
sort(B1+1,B1+b1+1);sort(B2+1,B2+b2+1);
b1=unique(B1+1,B1+b1+1)-B1-1;
b2=unique(B2+1,B2+b2+1)-B2-1;
s=0,t=b1+b2+1;
for(int i=1;i<=m;i++){
A[i].x1=lower_bound(B1+1,B1+b1+1,A[i].x1)-B1;
A[i].x2=lower_bound(B1+1,B1+b1+1,A[i].x2)-B1;
A[i].y1=lower_bound(B2+1,B2+b2+1,A[i].y1)-B2;
A[i].y2=lower_bound(B2+1,B2+b2+1,A[i].y2)-B2;
for(int x=A[i].x1;x<A[i].x2;x++)
for(int y=A[i].y1;y<A[i].y2;y++)
Add(x,y+b1,inf),Add(y+b1,x,0);
}
for(int i=1;i<b1;i++){Add(s,i,B1[i+1]-B1[i]);Add(i,s,0);} //行结点编号是第几行,列结点编号是第几列+总行数。
for(int i=1;i<b2;i++){Add(i+b1,t,B2[i+1]-B2[i]);Add(t,i+b1,0);}
Dinic();printf("%d\n",ans);
return 0;
}
CF1198E Rectangle Painting 2(最小割 思维的更多相关文章
- Codeforces 1198E Rectangle Painting 2 最小点覆盖(网络流)
题意:有一个n * n的棋盘,每个棋盘有某些矩形区域被染成了黑色(这些矩形区域有可能相交),问把所有黑色区域染成白色的最小花费是多少?你每次可以选择把一个矩形区域染成白色,花费是染色的矩形区域长和宽的 ...
- codeforces 1198E Rectangle Painting 2 最小点覆盖
题目传送门 题意: 有一个$n∗n$的网格,网格中有一些矩形是黑的,其他点都是白的. 你每次可以花费$ min (h,w)$的代价把一个$h*w$的矩形区域变白.求把所有黑格变白的最小代价. 思路: ...
- 洛谷3973 TJOI2015线性代数(最小割+思维)
感觉要做出来这个题,需要一定的线代芝士 首先,我们来观察这个柿子. 我们将\(B\)的权值看作是收益的话,\(C\)的权值就是花费. 根据矩阵乘法的原理,只有当\(a[i]和a[j]\)都为\(1\) ...
- BZOJ 1324 Exca 神剑 最小割
标题效果:鉴于加权值矩阵,带走一个地方的权利值之后,与其相邻的格儿童权利值变0.问多少可以取出到右值. 思维:Amber论文题目.不难建设,图着色.颜色从S连边,还有一种颜色向T连边.再把相邻的格子连 ...
- [ZJOI2011]最小割
题解: 以前看过,思维挺神奇的一道题目 首先可以证明最小割是不能相交的 那么我们就可以找到任意两点求一次最小割然后将割的两边分开来再递归这个过程 另外最小割就是vis=0与vis=1之间的连边 分治的 ...
- 【BZOJ3630】[JLOI2014]镜面通道 几何+最小割
[BZOJ3630][JLOI2014]镜面通道 Description 在一个二维平面上,有一个镜面通道,由镜面AC,BD组成,AC,BD长度相等,且都平行于x轴,B位于(0,0).通道中有n个外表 ...
- 「SHOI2007」「Codevs2341」 善意的投票(最小割
2341 善意的投票 2007年省队选拔赛上海市队选拔赛 时间限制: 5 s 空间限制: 128000 KB 题目等级 : 大师 Master 题目描述 Description 幼儿园里有n个小朋 ...
- BZOJ 2039:[2009国家集训队]employ人员雇佣(最小割)
http://www.lydsy.com/JudgeOnline/problem.php?id=2039 题意:中文题意. 思路:一开始想着和之前做的最大权闭合图有点像,但是如果把边全部当成点的话,那 ...
- UVALive 7264 Kejin Game 网络流+最小割
Kejin Game 题意:一个人有一颗技能树, 现在它想修练到某个技能 (假设为x), 现在修一个技能有3种方式: 1, 将该技能的前置技能都学完了,才能学该技能. 2, 取消一个技能 与 另一个技 ...
随机推荐
- 【Android Studio】使用 Genymotion 调试出现错误 INSTALL_FAILED_CPU_ABI_INCOMPATI
RT -- 解决方法参考: https://my.oschina.net/u/242764/blog/375909 http://blog.csdn.net/wjr2012/article/detai ...
- 前端面试 js 你有多了解call,apply,bind?
函数原型链中的 apply,call 和 bind 方法是 JavaScript 中相当重要的概念,与 this 关键字密切相关,相当一部分人对它们的理解还是比较浅显,所谓js基础扎实,绕不开这些基础 ...
- 使用 Netty 实现一个 MVC 框架
NettyMVC 上面介绍 Netty 能做是什么时我们说过,相比于 SpringMVC 等框架,Netty 没提供路由等功能,这也契合和 Netty 的设计思路,它更贴近底层.下面我们在 Netty ...
- 灰度级分层(一些基本的灰度变换函数)基本原理及Python实现
1. 基本原理 灰度级分层通常用于突出感兴趣的特定灰度范围内的亮度.灰度级分层有两大基本方法. 将感兴趣的灰度范围内的值显示为一个值(比如0),而其他范围的值为另外一个值(255). 将感兴趣的灰度范 ...
- idea+Spring+Mybatis+jersey+jetty构建一个简单的web项目
一.先使用idea创建一个maven项目. 二.引入jar包,修改pom.xml <dependencies> <dependency> <groupId>org. ...
- [android视频教程] 传智播客android开发视频教程
本套视频共有67集,是传智播客3G-Android就业班前8天的的课程量.本套视频教程是黎活明老师在2011年底对传智播客原来的Android核心基础课程精心重新录制的,比早期的Android课程内容 ...
- nginx 使用HTTPS协议-SSL证书模块报错解决-附nginx安装 : [emerg] the "ssl" parameter requires ngx_http_ssl_module in nginx.c
Linux系统下ngnix使用HTTPS协议启动报错: nginx: [emerg] the "ssl" parameter requires ngx_http_ssl_modul ...
- thinkphp model 创建之后访问后的错误···
解决:在php.ini里边先开启mysql的pdo扩展
- 5 X 5 方阵引出的寻路算法 之 路径遍历(完结)
此篇文章源自对一个有趣问题的思考,在我的另一篇博文<一个有趣的 5 X 5 方阵一笔画问题>中有详细介绍.在已知其结论的情况下,作为程序员的我,还是想利用该问题当做出发点,写一个可以遍 ...
- OpenResty 社区王院生:APISIX 的高性能实践
2019 年 7 月 6 日,OpenResty 社区联合又拍云,举办 OpenResty × Open Talk 全国巡回沙龙·上海站,OpenResty 软件基金会联合创始人王院生在活动上做了&l ...