这个题主要是转化为最小割的思路不好想到。

大意:给你一个大的正方形,有的点黑,有的点白,要把黑染白,你每次可以选一个矩形染色,代价是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(最小割 思维的更多相关文章

  1. Codeforces 1198E Rectangle Painting 2 最小点覆盖(网络流)

    题意:有一个n * n的棋盘,每个棋盘有某些矩形区域被染成了黑色(这些矩形区域有可能相交),问把所有黑色区域染成白色的最小花费是多少?你每次可以选择把一个矩形区域染成白色,花费是染色的矩形区域长和宽的 ...

  2. codeforces 1198E Rectangle Painting 2 最小点覆盖

    题目传送门 题意: 有一个$n∗n$的网格,网格中有一些矩形是黑的,其他点都是白的. 你每次可以花费$ min (h,w)$的代价把一个$h*w$的矩形区域变白.求把所有黑格变白的最小代价. 思路: ...

  3. 洛谷3973 TJOI2015线性代数(最小割+思维)

    感觉要做出来这个题,需要一定的线代芝士 首先,我们来观察这个柿子. 我们将\(B\)的权值看作是收益的话,\(C\)的权值就是花费. 根据矩阵乘法的原理,只有当\(a[i]和a[j]\)都为\(1\) ...

  4. BZOJ 1324 Exca 神剑 最小割

    标题效果:鉴于加权值矩阵,带走一个地方的权利值之后,与其相邻的格儿童权利值变0.问多少可以取出到右值. 思维:Amber论文题目.不难建设,图着色.颜色从S连边,还有一种颜色向T连边.再把相邻的格子连 ...

  5. [ZJOI2011]最小割

    题解: 以前看过,思维挺神奇的一道题目 首先可以证明最小割是不能相交的 那么我们就可以找到任意两点求一次最小割然后将割的两边分开来再递归这个过程 另外最小割就是vis=0与vis=1之间的连边 分治的 ...

  6. 【BZOJ3630】[JLOI2014]镜面通道 几何+最小割

    [BZOJ3630][JLOI2014]镜面通道 Description 在一个二维平面上,有一个镜面通道,由镜面AC,BD组成,AC,BD长度相等,且都平行于x轴,B位于(0,0).通道中有n个外表 ...

  7. 「SHOI2007」「Codevs2341」 善意的投票(最小割

    2341 善意的投票 2007年省队选拔赛上海市队选拔赛 时间限制: 5 s 空间限制: 128000 KB 题目等级 : 大师 Master   题目描述 Description 幼儿园里有n个小朋 ...

  8. BZOJ 2039:[2009国家集训队]employ人员雇佣(最小割)

    http://www.lydsy.com/JudgeOnline/problem.php?id=2039 题意:中文题意. 思路:一开始想着和之前做的最大权闭合图有点像,但是如果把边全部当成点的话,那 ...

  9. UVALive 7264 Kejin Game 网络流+最小割

    Kejin Game 题意:一个人有一颗技能树, 现在它想修练到某个技能 (假设为x), 现在修一个技能有3种方式: 1, 将该技能的前置技能都学完了,才能学该技能. 2, 取消一个技能 与 另一个技 ...

随机推荐

  1. 原创:用node.js搭建本地服务模拟接口访问实现数据模拟

    前端开发中,数据模拟是必要的,这样就能等后台接口写完,我们直接把接口请求的url地址从本地数据模拟url换成后台真实地址就完成项目了.传参之类的都不用动. 之前网上找了很多类似于mock等感觉都不太实 ...

  2. 【iOS】NSLog 打印 BOOL 类型值

    这个问题以前没在意,刚偶然打印,发现有些问题,上网查了下,发现是这么搞的: NSLog(@"%@", isEqual?@"YES":@"NO" ...

  3. QTableView表格控件区域选择-自绘选择区域

    目录 一.开心一刻 二.概述 三.效果展示 四.实现思路 1.绘制区域 2.绘制边框 3.绘制 五.相关文章 原文链接:QTableView表格控件区域选择-自绘选择区域 一.开心一刻 陪完客户回到家 ...

  4. C# 二维码的生成

    nuget 搜索qrcodenet,然后选择下载gma.qrcodenet public partial class Form1 : Form { public Form1() { Initializ ...

  5. java基础知识总结,绝对经典

    写代码: 1,明确需求.我要做什么? 2,分析思路.我要怎么做?1,2,3. 3,确定步骤.每一个思路部分用到哪些语句,方法,和对象. 4,代码实现.用具体的java语言代码把思路体现出来. 学习新技 ...

  6. 非web下的PowerMockito单元测试

    一.介绍 PowerMockito 可以用来 Mock 掉 final 方法(变量).静态方法(变量).私有方法(变量).想要使用 PowerMockito Mock掉这些内容,需要在编写的测试类上使 ...

  7. Button 使用详解

    极力推荐文章:欢迎收藏 Android 干货分享 阅读五分钟,每日十点,和您一起终身学习,这里是程序员Android 本篇文章主要介绍 Android 开发中的部分知识点,通过阅读本篇文章,您将收获以 ...

  8. NOIP 2018旅行题解

    从佳木斯回来刷一刷去年没A的题 题目描述 小 Y 是一个爱好旅行的 OIer.她来到 X 国,打算将各个城市都玩一遍. 小Y了解到, X国的 nn 个城市之间有 mm 条双向道路.每条双向道路连接两个 ...

  9. Centos安装git并配置ssh

    1.下载git安装包 git-2.9.4.tar.gz 2.解压 tar -xzvf git-2.9.4.tar.gz 3.修改解压后的文件名 mv git-2.9.4 git 4.安装git依赖的库 ...

  10. 消息中间件-activemq实战之整合Spring(四)

    前面的理论准备已经很充分,这一节我们来实战:将activemq整合到Spring框架才行中,因为Spring已经集成了JMS,这也为我们配置activermq带来了方便. 1. Spring对jms的 ...