很明显是最大权闭合子图,但要注意
互相保护的植物打不掉,被互相保护的植物所直接或间接保护的植物也打不掉
我们先拓扑排序然后dfs出能打掉的点,然后做最大权闭合子图

  1. const inf=;
  2. type node=record
  3. po,flow,next:longint;
  4. end;
  5.  
  6. var e,w:array[..] of node;
  7. num:array[..,..] of longint;
  8. cur,pre,p,st,q,numh,s,h,d:array[..] of longint;
  9. can,v:array[..] of boolean;
  10. n,m,i,j,x,y,len,k,t,f:longint;
  11.  
  12. function min(a,b:longint):longint;
  13. begin
  14. if a>b then exit(b) else exit(a);
  15. end;
  16.  
  17. procedure add(x,y:longint);
  18. begin
  19. inc(len);
  20. w[len].po:=y;
  21. inc(d[y]);
  22. w[len].next:=q[x];
  23. q[x]:=len;
  24. end;
  25.  
  26. procedure ins(x,y,f:longint);
  27. begin
  28. inc(len);
  29. e[len].po:=y;
  30. e[len].flow:=f;
  31. e[len].next:=p[x];
  32. p[x]:=len;
  33. end;
  34.  
  35. procedure build(x,y,f:longint);
  36. begin
  37. ins(x,y,f);
  38. ins(y,x,);
  39. end;
  40.  
  41. procedure dfs(x:longint);
  42. var i,y:longint;
  43. begin
  44. v[x]:=true;
  45. can[x]:=false;
  46. i:=q[x];
  47. while i<> do
  48. begin
  49. y:=w[i].po;
  50. if not v[y] then dfs(y);
  51. i:=w[i].next;
  52. end;
  53. end;
  54.  
  55. function sap:longint;
  56. var i,j,u,tmp,neck,q:longint;
  57. begin
  58. u:=;
  59. sap:=;
  60. for i:= to t do
  61. cur[i]:=p[i];
  62. numh[]:=t+;
  63. neck:=inf;
  64. while h[]<t+ do
  65. begin
  66. i:=cur[u];
  67. d[u]:=neck;
  68. while i<>- do
  69. begin
  70. j:=e[i].po;
  71. if (e[i].flow>) and (h[u]=h[j]+) then
  72. begin
  73. neck:=min(neck,e[i].flow);
  74. cur[u]:=i;
  75. pre[j]:=u;
  76. u:=j;
  77. if u=t then
  78. begin
  79. sap:=sap+neck;
  80. while u<> do
  81. begin
  82. u:=pre[u];
  83. j:=cur[u];
  84. dec(e[j].flow,neck);
  85. inc(e[j xor ].flow,neck);
  86. end;
  87. neck:=inf;
  88. end;
  89. break;
  90. end;
  91. i:=e[i].next;
  92. end;
  93. if i=- then
  94. begin
  95. dec(numh[h[u]]);
  96. if numh[h[u]]= then exit;
  97. q:=-;
  98. tmp:=t;
  99. i:=p[u];
  100. while i<>- do
  101. begin
  102. j:=e[i].po;
  103. if e[i].flow> then
  104. if h[j]<tmp then
  105. begin
  106. q:=i;
  107. tmp:=h[j];
  108. end;
  109. i:=e[i].next;
  110. end;
  111. h[u]:=tmp+;
  112. inc(numh[h[u]]);
  113. cur[u]:=q;
  114. if u<> then
  115. begin
  116. u:=pre[u];
  117. neck:=d[u];
  118. end;
  119. end;
  120. end;
  121. end;
  122.  
  123. begin
  124. readln(n,m);
  125. for i:= to n- do
  126. for j:= to m- do
  127. begin
  128. inc(k);
  129. num[i,j]:=k;
  130. end;
  131.  
  132. for i:= to n*m do
  133. begin
  134. read(s[i],k);
  135. for j:= to k do
  136. begin
  137. read(x,y);
  138. add(i,num[x,y]);
  139. end;
  140. end;
  141. for i:= to n do
  142. for j:=m- downto do
  143. add(num[i,j],num[i,j-]);
  144.  
  145. f:=; t:=;
  146. for i:= to n*m do
  147. if d[i]= then
  148. begin
  149. inc(t);
  150. st[t]:=i;
  151. end;
  152.  
  153. while f<=t do
  154. begin
  155. x:=st[f];
  156. can[x]:=true;
  157. i:=q[x];
  158. while i<> do
  159. begin
  160. y:=w[i].po;
  161. dec(d[y]);
  162. if d[y]= then
  163. begin
  164. inc(t);
  165. st[t]:=y;
  166. end;
  167. i:=w[i].next;
  168. end;
  169. inc(f);
  170. end;
  171. for i:= to n*m do
  172. if not can[i] then
  173. begin
  174. fillchar(v,sizeof(v),false);
  175. dfs(i);
  176. end;
  177. t:=n*m+; k:=; len:=-;
  178. fillchar(p,sizeof(p),);
  179. for i:= to n*m do
  180. if can[i] then
  181. begin
  182. if s[i]> then
  183. begin
  184. build(,i,s[i]);
  185. k:=k+s[i];
  186. end
  187. else build(i,t,-s[i]);
  188. j:=q[i];
  189. while j<> do
  190. begin
  191. y:=w[j].po;
  192. if can[y] then build(y,i,inf);
  193. j:=w[j].next;
  194. end;
  195. end;
  196. writeln(k-sap);
  197. end.

bzoj1565的更多相关文章

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

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

  2. 【BZOJ1565】【NOI2009】植物大战僵尸 网络流 最大权闭合子图

    题目大意 ​ 给你一个\(n\times m\)的地图,每个格子上都有一颗植物,有的植物能保护其他植物.僵尸从右往左进攻,每吃掉一颗植物就可以得到\(a_{i,j}\)的收益(\(a_{i,j}\)可 ...

  3. 【bzoj1565】 NOI2009—植物大战僵尸

    http://www.lydsy.com/JudgeOnline/problem.php?id=1565 (题目链接) 题意 给出$n*m$的棋盘,僵尸攻击每个格子可以获得$v$的分数,每个格子又会保 ...

  4. bzoj1565: [NOI2009]植物大战僵尸 最大权闭合子图,tarjan

    bzoj1565: [NOI2009]植物大战僵尸 链接 https://www.lydsy.com/JudgeOnline/problem.php?id=1565 思路 很容易的想到最大权闭合子图 ...

  5. 【BZOJ1565】【NOI2009】植物大战僵尸(网络流)

    [BZOJ1565][NOI2009]植物大战僵尸(网络流) 题面 BZOJ 洛谷 题解 做了这么多神仙题,终于有一道能够凭借自己智商能够想出来的题目了.... 好感动. 这就是一个比较裸的最小割模型 ...

  6. BZOJ1565 [NOI2009]植物大战僵尸(拓扑排序 + 最大权闭合子图)

    题目 Source http://www.lydsy.com/JudgeOnline/problem.php?id=1565 Description Input Output 仅包含一个整数,表示可以 ...

  7. BZOJ1565——[NOI2009]植物大战僵尸

    1.题意:有一些点,点与点之间有保护关系,每个点都有一个权值,求能获得的最大值 2.分析:裸的最大权闭合图,用网络流进行求解,然后我们发现点与点之间的保护关系可能构成环,这样网络流是无法处理的,然后我 ...

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

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

  9. BZOJ1565: [NOI2009]植物大战僵尸

    Description Input Output 仅包含一个整数,表示可以获得的最大能源收入.注意,你也可以选择不进行任何攻击,这样能源收入为0. Sample Input 3 2 10 0 20 0 ...

  10. BZOJ1565 植物大战僵尸

    AC通道:http://www.lydsy.com/JudgeOnline/problem.php?id=1565 这题看上去并不会做,结果又是最大权闭合子图的裸题. 于是就去看了一发论文,明白建图的 ...

随机推荐

  1. 01顺序栈_Stack---(栈与队列)

    #include "stdio.h" #include "stdlib.h" #include "io.h" #include " ...

  2. eclipse下的tomcat内存设置大小

    在eclipse中设置,居然可以了, 设置步骤如下: 1.点击eclipse上的debug图标旁边的下拉箭头 2.然后选择Run Configurations, 3.系统弹出设置tomcat配置页面, ...

  3. 安装Debian 7.8 过程,以及该系统的配置过程

    最近,我给自己的电脑安装了Debian操作系统,版本7.8 stable.Debian我相信大家都能了解,它是Ubuntu的基础,Ubuntu是基于Debian的unstable开发的.我安装这个系统 ...

  4. Jqery之select操作

    jquery获取select选择的文本与值 获取select : 获取select 选中的 text :     $("#ddlregtype").find("optio ...

  5. 使用Adobe Photoshop CC 2015批量修改图片尺寸

    最近在工作中遇到一个问题,当时客户给的图片尺寸与我要求的图片不符,由于图片非常的多,如果一张一张的修改,十分的麻烦,后来经过一位同事的指点,发现Adobe Photoshop CC 2015可以实现批 ...

  6. 图片裁切插件jCrop的使用心得(三)

    在这一篇里,我来具体讲讲代码该如何写. 下面是jCrop的初始化代码 //图片裁剪插件Jcrop初始化 function initJcrop() { // 图片加载完成 document.getEle ...

  7. 2014年度辛星html教程夏季版第六节

    不知道这样大家会不会感觉枯燥,总之不管大家怎么样,辛星始终会陪伴大家的,期待您的关注和支持,也衷心的希望我的博客能让您少走弯路,获得更系统的知识. ***************表格********* ...

  8. linux删除某类型文件的命令

    使用linux命令行,删除某目录下某类型的文件,如:删除.rar结尾的所有文件. 命令如下: find . -name "*.rar" -type f -print -exec r ...

  9. 由abcd四个字符取5个作允许重复的排列,要求a出现次数不超过2次,但不能不出现;b不超过1个;c不超过3个;d出现的次数为偶数。求满足以上条件的排列数。

    一.我的解法       由于没复习,我在想一般的方法,那就是d取0.2.4,然后分步计算,得到225这个错误答案. 二.指数型母函数       设满足以上条件取个排列的排列数为,的指数型母函数为 ...

  10. CSS使块半透明方法,兼容IE6

    前言 今天LOL玩机器人玩得真心不爽,实在崩溃,还是逛博客园比较爽些,记录自己的成长!说句实话我在编程方面确实是个菜鸟,菜到一种超神的地步,没一样自己特擅长的,悲催...... 废话少说,进入正题,H ...