正题

题目链接:https://www.luogu.com.cn/problem/P2805


题目大意

n∗mn*mn∗m的格子,攻击这个格子(x,y)(x,y)(x,y)可以获得价值cx,yc_{x,y}cx,y​,攻击一个格子(x,y)(x,y)(x,y)前要攻击(x,y+1)(x,y+1)(x,y+1)。

对于有的格子(x,y)(x,y)(x,y)会保护些格子,攻击一个格子直接必须攻击掉保护它的格子。

求最大价值


解题思路

先用拓扑排序去掉一些无法攻击的格子(相互保护或者被相互保护的格子保护的)。

然后就是最大权闭合图的问题就好了,跑网络流


codecodecode

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
#define p(x,y) ((x-1)*m+y)
using namespace std;
const int N=30*40,inf=2e9;
struct node{int to,next,w;
}a[N*N];
int ls[N],dep[N],tot=1,n,m,ans,s,e,in[N],edge[N][N],c[N],v[N][N];
queue<int>q;
void add_edge(int x,int y,int w)
{a[++tot].to=y;a[tot].next=ls[x];ls[x]=tot;a[tot].w=w;a[++tot].to=x;a[tot].next=ls[y];ls[y]=tot;a[tot].w=0;
}
bool bfs()
{memset(dep,0,sizeof(dep));while(!q.empty())q.pop();q.push(s);dep[s]=1;while(!q.empty()){int x=q.front();q.pop();for(int i=ls[x];i;i=a[i].next){int y=a[i].to;if(dep[y]||!a[i].w) continue;q.push(y);dep[y]=dep[x]+1;if(y==e) return 1;}}return 0;
}
int dinic(int x,int flow){int rest=0,k;if(x==e) return flow;for(int i=ls[x];i;i=a[i].next){int y=a[i].to;if(dep[x]+1==dep[y]&&a[i].w){rest+=(k=dinic(y,min(a[i].w,flow-rest)));a[i].w-=k;a[i^1].w+=k;if(rest==flow) return flow;} }if(!rest) dep[x]=0;return rest;
}
void net_flow(){while(bfs())ans-=dinic(s,inf);
}
void init(){scanf("%d%d",&n,&m);s=p(n,m)+1;e=s+1;for(int i=1;i<=n;i++)for(int j=1;j<=m;j++){int k;scanf("%d%d",&c[p(i,j)],&k);if(c[p(i,j)]>=0) edge[s][p(i,j)]=c[p(i,j)];if(c[p(i,j)]<0) edge[p(i,j)][e]=-c[p(i,j)];while(k--){int x,y;scanf("%d%d",&x,&y);x++;y++;v[p(i,j)][p(x,y)]++;edge[p(x,y)][p(i,j)]=inf,in[p(x,y)]++;}if(j<m) v[p(i,j+1)][p(i,j)]++,edge[p(i,j)][p(i,j+1)]=inf,in[p(i,j)]++;}
}
void top_sort(){for(int i=1;i<s;i++)if(!in[i])q.push(i);while(!q.empty()){int x=q.front();q.pop();for(int y=1;y<s;y++){if(!v[x][y]) continue;in[y]-=v[x][y];if(!in[y])q.push(y);}}
}
void build_graph(){for(int i=1;i<s;i++)if(!in[i]&&c[i]>0)ans+=c[i];for(int i=1;i<=e;i++)for(int j=1;j<=e;j++)  if(edge[i][j]&&!in[i]&&!in[j])add_edge(i,j,edge[i][j]);
}
int main()
{init();top_sort();build_graph();net_flow();printf("%d",ans);
}

P2805-[NOI2009]植物大战僵尸【网络流,最大权闭合图】相关推荐

  1. YBTOJ:矛盾指数(网络流-最大权闭合图)

    文章目录 题目描述 解析 代码 网络流要大胆建图 题目描述 公司内部共nnn个员工,员工之间可能有矛盾.若员工uuu和员工vvv有矛盾,用边(u,v)(u,v)(u,v)表示,共mmm个矛盾. 现在公 ...

  2. jzoj5057-[GDSOI2017模拟4.13]炮塔【网络流,最大权闭合图】

    正题 题面链接:https://gmoj.net/senior/#main/show/5057 题目大意 n∗mn*mn∗m的网格上有一些炮和敌军,每个炮可以攻击在它方向上一个敌军,但是要求炮弹的轨迹 ...

  3. Bzoj 1391: [Ceoi2008]order 网络流,最大权闭合图

    1391: [Ceoi2008]order Time Limit: 10 Sec  Memory Limit: 64 MB Submit: 1105  Solved: 331 [Submit][Sta ...

  4. BZOJ 1565 Luogu P2805 [NOI2009]植物大战僵尸 (Tarjan判环、最小割)

    我: "立个flag 14点之前调完这题" 洛谷AC时间: 2019-06-24 14:00:16 实力打脸... 网络流板子从来写不对系列 题目链接: (BZOJ) https: ...

  5. p2762-太空飞行计划问题【网络流,最大权闭合图,最小割】

    正题 AC评测记录链接: https://www.luogu.org/record/show?rid=7965757 大意 有nnn个实验,有m" role="presentati ...

  6. 【bzoj1565】[NOI2009]植物大战僵尸 拓扑排序+最大权闭合图

    原文地址:http://www.cnblogs.com/GXZlegend/p/6808268.html 题目描述 输入 输出 仅包含一个整数,表示可以获得的最大能源收入.注意,你也可以选择不进行任何 ...

  7. 【POJ - 2987】Firing(最大权闭合图,网络流最小割,输出方案最小,放大权值法tricks)

    题干: You've finally got mad at "the world's most stupid" employees of yours and decided to ...

  8. LibreOJ #6001. 「网络流 24 题」太空飞行计划 最大权闭合图

    #6001. 「网络流 24 题」太空飞行计划 内存限制:256 MiB时间限制:1000 ms标准输入输出 题目类型:传统评测方式:Special Judge 上传者: 匿名 提交提交记录统计讨论测 ...

  9. 太空飞行计划LibreOJ - 6001(网络流24题)(最大权闭合图)

    题目描述 W 教授正在为国家航天中心计划一系列的太空飞行.每次太空飞行可进行一系列商业性实验而获取利润.现已确定了一个可供选择的实验集合  ,和进行这些实验需要使用的全部仪器的集合 .实验  需要用到 ...

最新文章

  1. gitee markdown 笔记_picGo+github+坚果云打造自己的云笔记
  2. MySQL双主配置步骤
  3. 植物2 IOS 怎么实名认证_抖音怎么开店图解,抖音开店必须实名认证吗?,抖音开店需要什么条件...
  4. mac之brew安装卸载使用
  5. 缓存-SpringCache-整合体验@Cacheable
  6. java知识点_java知识点
  7. maven插件编写_编写Maven插件的提示
  8. web api添加拦截器
  9. 技术铺路,生态架桥:来自华为的开发者全面进阶说明书
  10. wamp无法访问php,wamp无法访问phpmyadmin怎么办
  11. 半导体八大工艺流程图_半导体之光刻胶,看五大龙头谁能迈出国产化第一步?...
  12. ps怎么抠地图线路_这些图片用PS怎么抠?ps抠图入门及PS抠图常用的7种方法(附详细步骤)...
  13. 201671030123+词频统计软件项目报告
  14. UVA 1391 - Astronauts(2-SET)
  15. 三星R463无线网卡驱动,声卡驱动,FN快捷键驱动,Easy_Display_Manager
  16. 在家做什么可以赚钱?适合在家的5个小项目!
  17. 香港20年十大最具影响力电影
  18. .cxx_destruct crash
  19. 浅谈前端工程师的职业生涯の(上篇)
  20. Android之发送短信的两种方式

热门文章

  1. php左连接,如何在php中对左联接查询返回的数组数据进...
  2. idea shell 中的函数 跳转_SpringBoot项目打包+shell脚本部署实践,太有用了
  3. vba 不等于_EXCEL中VBA基础语句(1)
  4. 二叉树的几道相似简单递归题
  5. [C++STL]deque容器用法介绍
  6. [蓝桥杯][算法提高VIP]数的划分-dp
  7. [蓝桥杯][2014年第五届真题]兰顿蚂蚁-模拟
  8. TCP(发消息:简易代码实现)
  9. C++中函数调用时的三种参数传递方式(x,*x,x)
  10. 数据结构与算法--图论-深度优先搜索及其应用