我们只要把他们可以有的限制用流量限制,再用两者关系限制一下就可以开心的跑了。

#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】士兵占领 最大流的模板题的更多相关文章

  1. 【BZOJ1458】士兵占领 最小流

    [BZOJ1458]士兵占领 Description 有一个M * N的棋盘,有的格子是障碍.现在你要选择一些格子来放置一些士兵,一个格子里最多可以放置一个士兵,障碍格里不能放置士兵.我们称这些士兵占 ...

  2. 【bzoj1458】士兵占领(最大流||有源汇最大流)

    转载 http://hzwer.com/2963.html Description 有一个M * N的棋盘,有的格子是障碍.现在你要选择一些格子来放置一些士兵,一个格子里最多可以放置一个士兵,障碍格里 ...

  3. 【BZOJ-1458】士兵占领 最大流

    1458: 士兵占领 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 782  Solved: 456[Submit][Status][Discuss] ...

  4. BZOJ1458 士兵占领 网络流 最大流 SAP

    原文链接http://www.cnblogs.com/zhouzhendong/p/8384699.html 题目传送门 - BZOJ1458 题意概括 有一个M * N的棋盘,有的格子是障碍.现在你 ...

  5. BZOJ1458:士兵占领(有上下界最小流)

    Description 有一个M * N的棋盘,有的格子是障碍.现在你要选择一些格子来放置一些士兵,一个格子里最多可以放置一个士兵,障碍格里不能放置士兵.我们称这些士兵占领了整个棋盘当满足第i行至少放 ...

  6. bzoj1458: 士兵占领(最大流)

    题目描述 有一个M * N的棋盘,有的格子是障碍.现在你要选择一些格子来放置一些士兵,一个格子里最多可以放置一个士兵,障碍格里不能放置士兵.我们称这些士兵占领了整个棋盘当满足第i行至少放置了Li个士兵 ...

  7. P4311 士兵占领[最大流]

    题目地址 有一个$M * N$的棋盘,有的格子是障碍.现在你要选择一些格子来放置一些士兵,一个格子里最多可以放置一个士兵,障碍格里不能放置士兵.我们称这些士兵占领了整个棋盘当满足第i行至少放置了$L_ ...

  8. bzoj 1458: 士兵占领 -- 最大流

    1458: 士兵占领 Time Limit: 10 Sec  Memory Limit: 64 MB Description 有一个M * N的棋盘,有的格子是障碍.现在你要选择一些格子来放置一些士兵 ...

  9. bzoj1458 士兵占领

    费用流,连下面几类边 1.s->s',流量为n*m,费用为0,表示最多可放置n*m个士兵 2.s'->行 (1)流量为a[i],费用为-n*m,表示必须在这一行放置a[i]个士兵. (2) ...

随机推荐

  1. 04 mysql 基础三 (进阶)

    mysql 基础三 阶段一 mysql 单表查询 1.查询所有记录 select * from department; ​ select * from student; ​ select * from ...

  2. struts2架构网站漏洞修复详情与利用漏洞修复方案

    struts2从开发出来到现在,很多互联网企业,公司,平台都在使用apache struts2系统来开发网站,以及应用系统,这几年来因为使用较多,被攻击者挖掘出来的struts2漏洞也越来越,从最一开 ...

  3. Java学习笔记一:三步搭建Java开发环境

    Java开发环境搭建 一:安装JDK: 1.下载地址:http://www.oracle.com/technetwork/java/javase/downloads 非常显眼的下载界面 2.点击下载后 ...

  4. [ACM] POJ 2409 Let it Bead (Polya计数)

    参考:https://blog.csdn.net/sr_19930829/article/details/38108871 #include <iostream> #include < ...

  5. python2.7入门---元组

        这次我们来学习下python中的元组.首先,基础认知点是,Python的元组与列表类似,不同之处在于元组的元素不能修改.元组使用小括号,列表使用方括号.元组创建很简单,只需要在括号中添加元素, ...

  6. oracle 11g XE 学习版添加scott用户方法全步骤

    安装企业版的orcale是不是太费时费力了?若只是学习用途的话,不妨试试轻便版的XE版本,同样是官网下载的,但是这个安装起来比完整版简便多了. 首先,你得先安装好orcale 11g XE 版本:(这 ...

  7. asp.net 模拟CURL调用微信公共平台API 上传下载多媒体文件接口

    FormItem类 public class FormItem { public string Name { get; set; } public ParamType ParamType { get; ...

  8. Django笔记 —— 高级视图和URL配置

    最近在学习Django,打算玩玩网页后台方面的东西,因为一直很好奇但却没怎么接触过.Django对我来说是一个全新的内容,思路想来也是全新的,或许并不能写得很明白,所以大家就凑合着看吧- 本篇笔记(其 ...

  9. android service笔记

    1.service 默认在主线程运行,所以不能在service中直接做访问网络,操作文件等耗时操作,要另外开启线程 2.通过startservice开启的服务,一旦服务开启,这个服务和开启他的调用者之 ...

  10. Kotlin 0

    #0 下载与配置: 官网上写的很详细,不再重复. #1 Hello world fun main(args: Array<String>) { println("Hello, w ...