【BZOJ1458】士兵占领 最大流的模板题
我们只要把他们可以有的限制用流量限制,再用两者关系限制一下就可以开心的跑了。
#include <cstdio>
#include <cstring>
#include <iostream>
#define r register
#define N 1005
using namespace std;
inline int read()
{
r int sum=;
r char ch=getchar();
while(ch<''||ch>'')ch=getchar();
while(ch>=''&&ch<='')
{
sum=(sum<<)+(sum<<)+ch-'';
ch=getchar();
}
return sum;
}
int g[N][N];
struct VIA
{
int to,next,w;
}c[N<<];
int head[N<<],t=;
int n,m,k;
inline void add(int x,int y,int z)
{
c[++t].to=y;
c[t].next=head[x];
head[x]=t;
c[t].w=z;
}
int L[N],C[N],LL[N],CC[N],S,T;
int deep[N<<],q[N<<],top,tail;
inline bool bfs()
{
memset(deep,,sizeof(deep));
q[]=S;
top=tail=;
deep[S]=;
while(top<=tail)
{
r int x=q[top++];
if(x==T)return ;
for(int i=head[x];i;i=c[i].next)
if(c[i].w&&deep[c[i].to]==)
{
deep[c[i].to]=deep[x]+;
q[++tail]=c[i].to;
}
}
return ;
}
inline int Min(int x,int y)
{
return x<y?x:y;
}
int dfs(int x,int v)
{
if(x==T||!v)return v;
r int ret=;
for(r int i=head[x];i;i=c[i].next)
if(c[i].w&&deep[c[i].to]==deep[x]+)
{
r int f=Min(v,c[i].w);
r int w=dfs(c[i].to,f);
v-=w;
ret+=w;
c[i].w-=w;
c[i^].w+=w;
if(!v)break;
}
if(!ret)deep[x]=-;
return ret;
}
inline int dinic()
{
r int ans=;
while(bfs())ans+=dfs(S,0x7f7f7f7f);
return ans;
}
int main()
{
r int ans=;
n=read(),m=read(),k=read();
for(r int i=;i<=n;++i)L[i]=read(),LL[i]=m,ans+=L[i];
for(r int i=;i<=m;++i)C[i]=read(),CC[i]=n,ans+=C[i];
for(r int i=,x,y;i<=k;++i)x=read(),y=read(),g[x][y]=,--LL[x],--CC[y];
for(r int i=;i<=n;++i)
if(L[i]>LL[i])
{
printf("JIONG!\n");
return ;
}
for(r int i=;i<=m;++i)
if(C[i]>CC[i])
{
printf("JIONG!\n");
return ;
}
S=n+m+,T=m+n+;
for(r int i=;i<=n;++i)
for(r int j=;j<=m;++j)
if(!g[i][j])
add(i,j+n,),add(j+n,i,);
for(r int i=;i<=n;++i)
add(S,i,L[i]),add(i,S,);
for(r int i=;i<=m;++i)
add(i+n,T,C[i]),add(T,n+i,);
ans-=dinic();
printf("%d\n",ans);
}
【BZOJ1458】士兵占领 最大流的模板题的更多相关文章
- 【BZOJ1458】士兵占领 最小流
[BZOJ1458]士兵占领 Description 有一个M * N的棋盘,有的格子是障碍.现在你要选择一些格子来放置一些士兵,一个格子里最多可以放置一个士兵,障碍格里不能放置士兵.我们称这些士兵占 ...
- 【bzoj1458】士兵占领(最大流||有源汇最大流)
转载 http://hzwer.com/2963.html Description 有一个M * N的棋盘,有的格子是障碍.现在你要选择一些格子来放置一些士兵,一个格子里最多可以放置一个士兵,障碍格里 ...
- 【BZOJ-1458】士兵占领 最大流
1458: 士兵占领 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 782 Solved: 456[Submit][Status][Discuss] ...
- BZOJ1458 士兵占领 网络流 最大流 SAP
原文链接http://www.cnblogs.com/zhouzhendong/p/8384699.html 题目传送门 - BZOJ1458 题意概括 有一个M * N的棋盘,有的格子是障碍.现在你 ...
- BZOJ1458:士兵占领(有上下界最小流)
Description 有一个M * N的棋盘,有的格子是障碍.现在你要选择一些格子来放置一些士兵,一个格子里最多可以放置一个士兵,障碍格里不能放置士兵.我们称这些士兵占领了整个棋盘当满足第i行至少放 ...
- bzoj1458: 士兵占领(最大流)
题目描述 有一个M * N的棋盘,有的格子是障碍.现在你要选择一些格子来放置一些士兵,一个格子里最多可以放置一个士兵,障碍格里不能放置士兵.我们称这些士兵占领了整个棋盘当满足第i行至少放置了Li个士兵 ...
- P4311 士兵占领[最大流]
题目地址 有一个$M * N$的棋盘,有的格子是障碍.现在你要选择一些格子来放置一些士兵,一个格子里最多可以放置一个士兵,障碍格里不能放置士兵.我们称这些士兵占领了整个棋盘当满足第i行至少放置了$L_ ...
- bzoj 1458: 士兵占领 -- 最大流
1458: 士兵占领 Time Limit: 10 Sec Memory Limit: 64 MB Description 有一个M * N的棋盘,有的格子是障碍.现在你要选择一些格子来放置一些士兵 ...
- bzoj1458 士兵占领
费用流,连下面几类边 1.s->s',流量为n*m,费用为0,表示最多可放置n*m个士兵 2.s'->行 (1)流量为a[i],费用为-n*m,表示必须在这一行放置a[i]个士兵. (2) ...
随机推荐
- 04 mysql 基础三 (进阶)
mysql 基础三 阶段一 mysql 单表查询 1.查询所有记录 select * from department; select * from student; select * from ...
- struts2架构网站漏洞修复详情与利用漏洞修复方案
struts2从开发出来到现在,很多互联网企业,公司,平台都在使用apache struts2系统来开发网站,以及应用系统,这几年来因为使用较多,被攻击者挖掘出来的struts2漏洞也越来越,从最一开 ...
- Java学习笔记一:三步搭建Java开发环境
Java开发环境搭建 一:安装JDK: 1.下载地址:http://www.oracle.com/technetwork/java/javase/downloads 非常显眼的下载界面 2.点击下载后 ...
- [ACM] POJ 2409 Let it Bead (Polya计数)
参考:https://blog.csdn.net/sr_19930829/article/details/38108871 #include <iostream> #include < ...
- python2.7入门---元组
这次我们来学习下python中的元组.首先,基础认知点是,Python的元组与列表类似,不同之处在于元组的元素不能修改.元组使用小括号,列表使用方括号.元组创建很简单,只需要在括号中添加元素, ...
- oracle 11g XE 学习版添加scott用户方法全步骤
安装企业版的orcale是不是太费时费力了?若只是学习用途的话,不妨试试轻便版的XE版本,同样是官网下载的,但是这个安装起来比完整版简便多了. 首先,你得先安装好orcale 11g XE 版本:(这 ...
- asp.net 模拟CURL调用微信公共平台API 上传下载多媒体文件接口
FormItem类 public class FormItem { public string Name { get; set; } public ParamType ParamType { get; ...
- Django笔记 —— 高级视图和URL配置
最近在学习Django,打算玩玩网页后台方面的东西,因为一直很好奇但却没怎么接触过.Django对我来说是一个全新的内容,思路想来也是全新的,或许并不能写得很明白,所以大家就凑合着看吧- 本篇笔记(其 ...
- android service笔记
1.service 默认在主线程运行,所以不能在service中直接做访问网络,操作文件等耗时操作,要另外开启线程 2.通过startservice开启的服务,一旦服务开启,这个服务和开启他的调用者之 ...
- Kotlin 0
#0 下载与配置: 官网上写的很详细,不再重复. #1 Hello world fun main(args: Array<String>) { println("Hello, w ...