# 题目

## Source

http://www.lydsy.com/JudgeOnline/problem.php?id=1565

3 2
10 0
20 0
-10 0
-5 1 0 0
100 1 2 1
100 0

25

# 代码

```#include<cstdio>
#include<cstring>
#include<vector>
#include<queue>
#include<algorithm>
using namespace std;
#define INF (1<<30)
#define MAXN 666
#define MAXM 666*666*2

struct Edge{
int v,cap,flow,next;
}edge[MAXM];
int vs,vt,NE,NV;

edge[NE].v=v; edge[NE].cap=cap; edge[NE].flow=0;
edge[NE].v=u; edge[NE].cap=0; edge[NE].flow=0;
}

int level[MAXN];
int gap[MAXN];
void bfs(){
memset(level,-1,sizeof(level));
memset(gap,0,sizeof(gap));
level[vt]=0;
gap[level[vt]]++;
queue<int> que;
que.push(vt);
while(!que.empty()){
int u=que.front(); que.pop();
int v=edge[i].v;
if(level[v]!=-1) continue;
level[v]=level[u]+1;
gap[level[v]]++;
que.push(v);
}
}
}

int pre[MAXN];
int cur[MAXN];
int ISAP(){
bfs();
memset(pre,-1,sizeof(pre));
int u=pre[vs]=vs,flow=0,aug=INF;
gap[0]=NV;
while(level[vs]<NV){
bool flag=false;
for(int &i=cur[u]; i!=-1; i=edge[i].next){
int v=edge[i].v;
if(edge[i].cap!=edge[i].flow && level[u]==level[v]+1){
flag=true;
pre[v]=u;
u=v;
//aug=(aug==-1?edge[i].cap:min(aug,edge[i].cap));
aug=min(aug,edge[i].cap-edge[i].flow);
if(v==vt){
flow+=aug;
for(u=pre[v]; v!=vs; v=u,u=pre[u]){
edge[cur[u]].flow+=aug;
edge[cur[u]^1].flow-=aug;
}
//aug=-1;
aug=INF;
}
break;
}
}
if(flag) continue;
int minlevel=NV;
int v=edge[i].v;
if(edge[i].cap!=edge[i].flow && level[v]<minlevel){
minlevel=level[v];
cur[u]=i;
}
}
if(--gap[level[u]]==0) break;
level[u]=minlevel+1;
gap[level[u]]++;
u=pre[u];
}
return flow;
}

vector<int> G[MAXN];
int score[MAXN],deg[MAXN];

int main(){
int n,m,a,b,c;
scanf("%d%d",&n,&m);
for(int i=0; i<n*m; ++i){
scanf("%d",&score[i]);
scanf("%d",&c);
while(c--){
scanf("%d%d",&a,&b);
G[i].push_back(a*m+b);
++deg[a*m+b];
}
if(i%m){
G[i].push_back(i-1);
++deg[i-1];
}
}
vs=n*m; vt=vs+1; NV=vt+1; NE=0;
int tot=0;
queue<int> que;
for(int i=0; i<vs; ++i){
if(deg[i]==0) que.push(i);
}
while(!que.empty()){
int u=que.front(); que.pop();
if(score[u]<0){
}else{
tot+=score[u];
}
for(int i=0; i<G[u].size(); ++i){
int v=G[u][i];
--deg[v];
if(deg[v]==0) que.push(v);
}
}
printf("%d",tot-ISAP());
return 0;
}
```

## BZOJ1565 [NOI2009]植物大战僵尸（拓扑排序 + 最大权闭合子图）的更多相关文章

1. b2OJ_1565_[NOI2009]植物大战僵尸_拓扑排序+最大权闭合子图

b2OJ_1565_[NOI2009]植物大战僵尸_拓扑排序+最大权闭合子 题意:n*m个植物,每个植物有分数(可正可负),和能保护植物的位置.只能从右往左吃,并且不能吃正被保护着的,可以一个不吃,求 ...

2. 【BZOJ-1565】植物大战僵尸 拓扑排序 + 最小割

1565: [NOI2009]植物大战僵尸 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 1972  Solved: 917[Submit][Statu ...

3. [bzoj1565][NOI2009]植物大战僵尸_网络流_拓扑排序

植物大战僵尸 bzoj1565 题目大意:给你一张网格图,上面种着一些植物.你从网格的最右侧开始进攻.每个植物可以对僵尸提供能量或者消耗僵尸的能量.每个植物可以保护一个特定网格内的植物,如果一个植物被 ...

4. Bzoj 1565: [NOI2009]植物大战僵尸 最大权闭合图,拓扑排序

题目: http://cojs.tk/cogs/problem/problem.php?pid=410 410. [NOI2009] 植物大战僵尸 ★★★   输入文件:pvz.in   输出文件:p ...

5. BZOJ 1565: [NOI2009]植物大战僵尸( 最小割 )

先拓扑排序搞出合法的, 然后就是最大权闭合图模型了.... --------------------------------------------------------------------- ...

6. bzoj 1565 最大权闭合子图

因为每个植物都有保护的点(每排相邻的右面的算是保护左面的),所以连他和保护 的点一条边,然后每个点有自己的权值,要找到最大的权值且满足每个点在访问时他 的前驱一定被访问,那么反向建边,转化为后继必须访 ...

7. HDU 3879 Base Station（最大权闭合子图）

经典例题,好像说可以转化成maxflow(n,n+m),暂时只可以勉强理解maxflow(n+m,n+m)的做法. 题意:输入n个点,m条边的无向图.点权为负,边权为正,点权为代价,边权为获益,输出最 ...

8. [BZOJ 1497][NOI 2006]最大获利（最大权闭合子图）

题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1497 分析: 这是在有向图中的问题,且边依赖于点,有向图中存在点.边之间的依赖关系可以 ...

9. HDU4971 A simple brute force problem.（强连通分量缩点 + 最大权闭合子图）

题目 Source http://acm.hdu.edu.cn/showproblem.php?pid=4971 Description There's a company with several ...

## 随机推荐

1. sql语句with as 和with(nolock)

当with和as一起用时,表示定义一个SQL字句 例: with sonword as ( select * from person  ) select * from  student where n ...

2. spring,mybatis事务管理配置与@Transactional注解使用[转]

spring,mybatis事务管理配置与@Transactional注解使用[转] spring,mybatis事务管理配置与@Transactional注解使用 概述事务管理对于企业应用来说是至关 ...

3. poj 1113 Wall

题目链接:http://poj.org/problem?id=1113 题目大意:给出点集和一个长度L,要求用最短长度的围墙把所有点集围住,并且围墙每一处距离所有点的距离最少为L,求围墙的长度. 解法 ...

4. Android网络：开发浏览器（一）——基本的浏览网页功能开发

我们定义这个版本为1.0版本. 首先,因为要制作一个浏览器,那么就不能通过调用内置浏览器来实现网页的浏览功能,但是可以使用WebView组件来进行. 在此之前,我们可以来看看两种网页显示方式:     ...

5. 新浪SAE快速上手教程

新浪SAE快速上手教程[1]如何免费开通新浪云 2014-07-18 > 新浪SAE快速上手教程[2]如何创建.删除应用 2014-07-24 > 新浪SAE快速上手教程[3]如何上传应 ...

6. SQL Server 2012的附件失败，与硬链接的问题

1.我在系统上做了硬链接,也就是把C盘的某个目录,映射为D盘. 2.把数据库文件mdf和ldf放入D盘.结果,SQL Server的企业管理器,无法从D盘里加载mdf或ldf文件,并且在目录下无法显示 ...

7. 【Egret】使用VSCode 编译，断点调试Egret项目

经过我日积月累的摸索,还是一直模模糊糊的,搞不懂,今天经晨哥点拨两下,一下子就恍然大悟,搞定了怎么弄这个东西,现将经验分享如下. 一.效果目的 1.在VSCode里,直接F5打开Egret页面,并且可 ...

8. Xmind8 Pro安装教程 Windows

xmind是一款优秀的思维导图制作软件,这一点相信不用太多解释. 尤其作为测试人员导出测试用例为excel极其方便.网上xmind的破解方法加自己琢磨,重新整理了破解步骤. 亲测可以永久激活截止2 ...

9. Apache shiro集群实现 （三）shiro身份认证（Shiro Authentication）

Apache shiro集群实现 (一) shiro入门介绍 Apache shiro集群实现 (二) shiro 的INI配置 Apache shiro集群实现 (三)shiro身份认证(Shiro ...

10. CUDA学习，使用shared memory实现Reverse Array