一开始感觉像一个类似二分图的最小割,于是成功跑偏2333333
很容易发现一个关键性质,'L'的两个角落在的偶数格 的行(或者列)的奇偶性一定不同。。。。
于是我们再把偶数格按照行(或者列)的奇偶性再细分成 两类,可以发现只有一个奇数格向旁边的两类偶数格都有空挡的话,才能放下一个L。
所以我们把放L看成网络中的一条流量,要经过三种点,于是对于奇数格拆点限流然后四列点直接跑最大费用最大流就行了。。。。
因为不用把m个L都放完,所以增广到 dis<0 的时候跳出就好啦。。。。
#include<cstdio>
#include<vector>
#include<queue>
#include<cstring>
#define ll long long
using namespace std;
#define pb push_back
const int N=10005; vector<int> g[N];
struct lines{
int from,to,flow,cap,cost;
}l[N*73];
int dx[4]={0,0,1,-1},dy[4]={1,-1,0,0},X,Y;
int S,T,t=-1,d[N],p[N],a[N],n,m,ans;
int val[55][55],id[55][55],cnt,k;
bool iq[N],ban[55][55]; inline void add(int from,int to,int cap,int cost){
l[++t]=(lines){from,to,0,cap,cost},g[from].pb(t);
l[++t]=(lines){to,from,0,0,-cost},g[to].pb(t);
} inline bool SPFA(){
memset(d,-0x3f,sizeof(d)),d[S]=0,p[S]=0;
queue<int> q; q.push(S),a[S]=1<<30;
int x,pre; lines e; while(!q.empty()){
x=q.front(),q.pop(); for(int i=g[x].size()-1;i>=0;i--){
e=l[g[x][i]];
if(e.flow<e.cap&&d[x]+e.cost>d[e.to]){
d[e.to]=d[x]+e.cost;
a[e.to]=min(a[x],e.cap-e.flow);
p[e.to]=g[x][i];
if(!iq[e.to]) iq[e.to]=1,q.push(e.to);
}
} iq[x]=0;
} if(d[T]<0) return 0; if(a[T]>=m){ ans-=d[T]*m; return 0;} ans-=d[T]*a[T],m-=a[T]; for(x=T;x!=S;x=l[pre].from){
pre=p[x],l[pre].flow+=a[T];
l[pre^1].flow-=a[T];
} return 1;
} inline void solve(){
S=0,T=cnt+1;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++) if(!ban[i][j])
if(i+j&1) add(id[i][j],id[i][j]+cnt,1,val[i][j]);
else if(i&1){
add(S,id[i][j],1,0);
for(int u=0;u<4;u++){
X=i+dx[u],Y=j+dy[u];
if(id[X][Y]) add(id[i][j],id[X][Y],1,0);
}
}
else{
add(id[i][j],T,1,0);
for(int u=0;u<4;u++){
X=i+dx[u],Y=j+dy[u];
if(id[X][Y]) add(id[X][Y]+cnt,id[i][j],1,0);
}
} while(SPFA());
} int main(){
// freopen("marshland.in","r",stdin);
// freopen("marshland.out","w",stdout); scanf("%d%d%d",&n,&m,&k); for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++){
scanf("%d",&val[i][j]);
id[i][j]=++cnt,ans+=val[i][j];
} while(k--) scanf("%d%d",&X,&Y),ban[X][Y]=1; solve(); printf("%d\n",ans);
return 0;
}
[2018湖南省队集训] 6.24 T1 marshland的更多相关文章
-
[2018湖南省队集训] 6.28 T3 simulate
这道模拟题出的我毫无脾气2333 最重要的是先要发现操作顺序不影响最后的答案,也就是每次随便挑一个>=2的数进行操作最后总是可以得到同样的数列. (这个还不太难想qwq) 但是最骚的是接下来的模 ...
-
[2018湖南省队集训] 6.28 T2 color
毒瘤计数题2333,(小声)k其实可以出到1e9,不过这样求组合数的时候就要记1000种数的1~1000次下降幂(用到的组合数中第一维在1e9级别的只有1000种左右,第二维都是<=1000), ...
-
【考试记录】2018 山东省队集训第一轮D4(雾)
T1题意: 给你一个$n\times m$的矩阵$B$,求它能由最少多少个形如两个向量之积$(n\times 1)\times(1\times m)$的矩阵相加得到. 题解: 考虑上界,最多需要$mi ...
-
【CodeVS 5032】【省队集训2016 Day5 T1】Play with array
一开始我用分块大法,分成$\sqrt{n}$块,每个块上维护一个Splay,然后balabala维护一下,时间复杂度是$O(n\sqrt{n}logn)$.后来对拍的时候发现比$O(n^2)$的暴力跑 ...
-
湖南省队集训 Day 2
从这里开始 Problem A 走路 Problem B 游戏 Problem C 有趣的字符串题 暴力分又没骗满sad..... Problem A 走路 $O(n^2)$动态规划是显然的. 更新方 ...
-
【欧拉回路+最小生成树】SD开车@山东2018省队一轮集训day1
目录 [欧拉回路+最小生成树]SD开车@山东2018省队一轮集训day1 PROBLEM 题目描述 输入 输出 样例输入 样例输出 提示 SOLUTION CODE [欧拉回路+最小生成树]SD开车@ ...
-
[2018HN省队集训D5T1] 沼泽地marshland
[2018HN省队集训D5T1] 沼泽地marshland 题意 给定一张 \(n\times n\) 的棋盘, 对于位置 \((x,y)\), 若 \(x+y\) 为奇数则可能有一个正权值. 你可以 ...
-
HN2018省队集训
HN2018省队集训 Day1 今天的题目来自于雅礼的高二学长\(dy0607\). 压缩包下载 密码: 27n7 流水账 震惊!穿着该校校服竟然在四大名校畅通无阻?霸主地位已定? \(7:10\)从 ...
-
2018HN省队集训
HNOI2018省队集训 Day 1 流水账 T1 tree 换根+求\(lca\)+求子树和,一脸bzoj3083遥远的国度的既视感.子树和讨论一下就好了,\(lca\)?也是大力讨论一波. 先写了 ...
随机推荐
-
CentOS 7.2 安装配置mysql主从服务器
MySQL官方压缩包安装: 1:下载mysql官方版本,此处以目前最新版本5.7.14为例,下载的64位版本文件为: mysql-5.7.14-linux-glibc2.5-x86_64.tar 2: ...
-
zigbee学习之路(九):串口(发送)
一.前言 今天,我们来学习和实验串口模块方面的,串口通信是我们常用的通信手段,通过串口交互,我们可以很容易的和pc机进行数据的交换和发送,所以我们今天就来学习一下.这个实验所进行的功能是一开始CC25 ...
-
JavaScript中两个感叹号(!!)的作用是什么?
!!一般用来将后面的表达式强制转换为布尔类型的数据(boolean),也就是只能是true或者false. 看这么个例子: var a: var b=!!a; a默认是undefined.!a是tru ...
-
sqlsever2008数据库的备份与还原
本文数据库的名称为ProjectControl public static SqlConnection conn = new SqlConnection("server=(local);u ...
-
mysql学习(八)数据表类型-字符集
数据存储引擎: MyISAM:强化快速读取操作. 也有缺点.一些功能不支持 InnoDB:支持一些MyIASM一些不支持的功能 缺点:占用空间大 对比 ...
-
分布式配置管理平台 Disconf
Distributed Configuration Management Platform(分布式配置管理平台) 专注于各种 分布式系统配置管理 的通用组件/通用平台, 提供统一的配置管理服务. 包括 ...
-
SDWebImage 常用方法
SDWebImage是iOS中一款处理图片的框架, 使用它提供的方法, 一句话就能让UIImageView自动去加载并显示网络图片.特别是在UITableViewCell中有UIImageView需要 ...
-
kgdb接收一个数据包详解
0 kdb>kgdb // 可进入kgdb 模式 if (dbg_kdb_mode) { error = kdb_stub(ks); } else ...
-
jmx additional port
http://*.com/questions/20884353/why-java-opens-3-ports-when-jmx-is-configured http://blo ...
-
EasyUI combobox下拉多选框的实现
combobox实现下拉列表多选, 效果如下