bzoj1565
很明显是最大权闭合子图,但要注意
互相保护的植物打不掉,被互相保护的植物所直接或间接保护的植物也打不掉
我们先拓扑排序然后dfs出能打掉的点,然后做最大权闭合子图
- const inf=;
- type node=record
- po,flow,next:longint;
- end;
- var e,w:array[..] of node;
- num:array[..,..] of longint;
- cur,pre,p,st,q,numh,s,h,d:array[..] of longint;
- can,v:array[..] of boolean;
- n,m,i,j,x,y,len,k,t,f:longint;
- function min(a,b:longint):longint;
- begin
- if a>b then exit(b) else exit(a);
- end;
- procedure add(x,y:longint);
- begin
- inc(len);
- w[len].po:=y;
- inc(d[y]);
- w[len].next:=q[x];
- q[x]:=len;
- end;
- procedure ins(x,y,f:longint);
- begin
- inc(len);
- e[len].po:=y;
- e[len].flow:=f;
- e[len].next:=p[x];
- p[x]:=len;
- end;
- procedure build(x,y,f:longint);
- begin
- ins(x,y,f);
- ins(y,x,);
- end;
- procedure dfs(x:longint);
- var i,y:longint;
- begin
- v[x]:=true;
- can[x]:=false;
- i:=q[x];
- while i<> do
- begin
- y:=w[i].po;
- if not v[y] then dfs(y);
- i:=w[i].next;
- end;
- end;
- function sap:longint;
- var i,j,u,tmp,neck,q:longint;
- begin
- u:=;
- sap:=;
- for i:= to t do
- cur[i]:=p[i];
- numh[]:=t+;
- neck:=inf;
- while h[]<t+ do
- begin
- i:=cur[u];
- d[u]:=neck;
- while i<>- do
- begin
- j:=e[i].po;
- if (e[i].flow>) and (h[u]=h[j]+) then
- begin
- neck:=min(neck,e[i].flow);
- cur[u]:=i;
- pre[j]:=u;
- u:=j;
- if u=t then
- begin
- sap:=sap+neck;
- while u<> do
- begin
- u:=pre[u];
- j:=cur[u];
- dec(e[j].flow,neck);
- inc(e[j xor ].flow,neck);
- end;
- neck:=inf;
- end;
- break;
- end;
- i:=e[i].next;
- end;
- if i=- then
- begin
- dec(numh[h[u]]);
- if numh[h[u]]= then exit;
- q:=-;
- tmp:=t;
- i:=p[u];
- while i<>- do
- begin
- j:=e[i].po;
- if e[i].flow> then
- if h[j]<tmp then
- begin
- q:=i;
- tmp:=h[j];
- end;
- i:=e[i].next;
- end;
- h[u]:=tmp+;
- inc(numh[h[u]]);
- cur[u]:=q;
- if u<> then
- begin
- u:=pre[u];
- neck:=d[u];
- end;
- end;
- end;
- end;
- begin
- readln(n,m);
- for i:= to n- do
- for j:= to m- do
- begin
- inc(k);
- num[i,j]:=k;
- end;
- for i:= to n*m do
- begin
- read(s[i],k);
- for j:= to k do
- begin
- read(x,y);
- add(i,num[x,y]);
- end;
- end;
- for i:= to n do
- for j:=m- downto do
- add(num[i,j],num[i,j-]);
- f:=; t:=;
- for i:= to n*m do
- if d[i]= then
- begin
- inc(t);
- st[t]:=i;
- end;
- while f<=t do
- begin
- x:=st[f];
- can[x]:=true;
- i:=q[x];
- while i<> do
- begin
- y:=w[i].po;
- dec(d[y]);
- if d[y]= then
- begin
- inc(t);
- st[t]:=y;
- end;
- i:=w[i].next;
- end;
- inc(f);
- end;
- for i:= to n*m do
- if not can[i] then
- begin
- fillchar(v,sizeof(v),false);
- dfs(i);
- end;
- t:=n*m+; k:=; len:=-;
- fillchar(p,sizeof(p),);
- for i:= to n*m do
- if can[i] then
- begin
- if s[i]> then
- begin
- build(,i,s[i]);
- k:=k+s[i];
- end
- else build(i,t,-s[i]);
- j:=q[i];
- while j<> do
- begin
- y:=w[j].po;
- if can[y] then build(y,i,inf);
- j:=w[j].next;
- end;
- end;
- writeln(k-sap);
- end.
bzoj1565的更多相关文章
- [bzoj1565][NOI2009]植物大战僵尸_网络流_拓扑排序
植物大战僵尸 bzoj1565 题目大意:给你一张网格图,上面种着一些植物.你从网格的最右侧开始进攻.每个植物可以对僵尸提供能量或者消耗僵尸的能量.每个植物可以保护一个特定网格内的植物,如果一个植物被 ...
- 【BZOJ1565】【NOI2009】植物大战僵尸 网络流 最大权闭合子图
题目大意 给你一个\(n\times m\)的地图,每个格子上都有一颗植物,有的植物能保护其他植物.僵尸从右往左进攻,每吃掉一颗植物就可以得到\(a_{i,j}\)的收益(\(a_{i,j}\)可 ...
- 【bzoj1565】 NOI2009—植物大战僵尸
http://www.lydsy.com/JudgeOnline/problem.php?id=1565 (题目链接) 题意 给出$n*m$的棋盘,僵尸攻击每个格子可以获得$v$的分数,每个格子又会保 ...
- bzoj1565: [NOI2009]植物大战僵尸 最大权闭合子图,tarjan
bzoj1565: [NOI2009]植物大战僵尸 链接 https://www.lydsy.com/JudgeOnline/problem.php?id=1565 思路 很容易的想到最大权闭合子图 ...
- 【BZOJ1565】【NOI2009】植物大战僵尸(网络流)
[BZOJ1565][NOI2009]植物大战僵尸(网络流) 题面 BZOJ 洛谷 题解 做了这么多神仙题,终于有一道能够凭借自己智商能够想出来的题目了.... 好感动. 这就是一个比较裸的最小割模型 ...
- BZOJ1565 [NOI2009]植物大战僵尸(拓扑排序 + 最大权闭合子图)
题目 Source http://www.lydsy.com/JudgeOnline/problem.php?id=1565 Description Input Output 仅包含一个整数,表示可以 ...
- BZOJ1565——[NOI2009]植物大战僵尸
1.题意:有一些点,点与点之间有保护关系,每个点都有一个权值,求能获得的最大值 2.分析:裸的最大权闭合图,用网络流进行求解,然后我们发现点与点之间的保护关系可能构成环,这样网络流是无法处理的,然后我 ...
- 【BZOJ-1565】植物大战僵尸 拓扑排序 + 最小割
1565: [NOI2009]植物大战僵尸 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 1972 Solved: 917[Submit][Statu ...
- BZOJ1565: [NOI2009]植物大战僵尸
Description Input Output 仅包含一个整数,表示可以获得的最大能源收入.注意,你也可以选择不进行任何攻击,这样能源收入为0. Sample Input 3 2 10 0 20 0 ...
- BZOJ1565 植物大战僵尸
AC通道:http://www.lydsy.com/JudgeOnline/problem.php?id=1565 这题看上去并不会做,结果又是最大权闭合子图的裸题. 于是就去看了一发论文,明白建图的 ...
随机推荐
- 01顺序栈_Stack---(栈与队列)
#include "stdio.h" #include "stdlib.h" #include "io.h" #include " ...
- eclipse下的tomcat内存设置大小
在eclipse中设置,居然可以了, 设置步骤如下: 1.点击eclipse上的debug图标旁边的下拉箭头 2.然后选择Run Configurations, 3.系统弹出设置tomcat配置页面, ...
- 安装Debian 7.8 过程,以及该系统的配置过程
最近,我给自己的电脑安装了Debian操作系统,版本7.8 stable.Debian我相信大家都能了解,它是Ubuntu的基础,Ubuntu是基于Debian的unstable开发的.我安装这个系统 ...
- Jqery之select操作
jquery获取select选择的文本与值 获取select : 获取select 选中的 text : $("#ddlregtype").find("optio ...
- 使用Adobe Photoshop CC 2015批量修改图片尺寸
最近在工作中遇到一个问题,当时客户给的图片尺寸与我要求的图片不符,由于图片非常的多,如果一张一张的修改,十分的麻烦,后来经过一位同事的指点,发现Adobe Photoshop CC 2015可以实现批 ...
- 图片裁切插件jCrop的使用心得(三)
在这一篇里,我来具体讲讲代码该如何写. 下面是jCrop的初始化代码 //图片裁剪插件Jcrop初始化 function initJcrop() { // 图片加载完成 document.getEle ...
- 2014年度辛星html教程夏季版第六节
不知道这样大家会不会感觉枯燥,总之不管大家怎么样,辛星始终会陪伴大家的,期待您的关注和支持,也衷心的希望我的博客能让您少走弯路,获得更系统的知识. ***************表格********* ...
- linux删除某类型文件的命令
使用linux命令行,删除某目录下某类型的文件,如:删除.rar结尾的所有文件. 命令如下: find . -name "*.rar" -type f -print -exec r ...
- 由abcd四个字符取5个作允许重复的排列,要求a出现次数不超过2次,但不能不出现;b不超过1个;c不超过3个;d出现的次数为偶数。求满足以上条件的排列数。
一.我的解法 由于没复习,我在想一般的方法,那就是d取0.2.4,然后分步计算,得到225这个错误答案. 二.指数型母函数 设满足以上条件取个排列的排列数为,的指数型母函数为 ...
- CSS使块半透明方法,兼容IE6
前言 今天LOL玩机器人玩得真心不爽,实在崩溃,还是逛博客园比较爽些,记录自己的成长!说句实话我在编程方面确实是个菜鸟,菜到一种超神的地步,没一样自己特擅长的,悲催...... 废话少说,进入正题,H ...