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

这题看上去并不会做,结果又是最大权闭合子图的裸题。

于是就去看了一发论文,明白建图的技巧。

论文地址:《最小割模型在信息学竞赛中的应用》

嗯,讲这个的部分在第三章。

好了,看完论文就知道DAG的怎么搞了。

这题可能有环,因为环上的不能选,有边连到环上[被环上的点保护着的]的也不能选。

那么我们就把环弄掉,连在环上的呢?用反图,然后拓扑排序就可以同时把这两种点排除掉了。

#include<cstdio>
#include<cstring>
#include<algorithm> using namespace std; const int maxn=;
const int maxt=;
const int INF=0x3f3f3f3f; struct Node{
int data,next,low;
}node[maxt*maxt*]; #define now node[point].data
#define then node[point].next
#define www node[point].low struct Edge{
int u,v;
}edge[maxt*maxt]; int n,m,tot,cnt;
int s,t,Idex,ans;
int indeg[maxt],stack[maxt],top;
int head[maxt],cur[maxt];
int dis[maxt],que[maxt];
int val[maxn][maxn],ind[maxn][maxn];
bool used[maxt]; void add1(int u,int v){
node[cnt].data=v;node[cnt].next=head[u];head[u]=cnt++;indeg[v]++;
edge[cnt].u=v,edge[cnt].v=u;
} void add(int u,int v,int w){
node[cnt].data=v;node[cnt].next=head[u];node[cnt].low=w;head[u]=cnt++;
node[cnt].data=u;node[cnt].next=head[v];node[cnt].low=;head[v]=cnt++;
} bool BFS(){
memset(dis,-,sizeof(dis));
int H=,T=;dis[]=;
while(H<T){
H++;
for(int point=head[que[H]];point!=-;point=then)
if(www && dis[now]<){
dis[now]=dis[que[H]]+;
que[++T]=now;
}
}
return dis[t]>;
} int dfs(int x,int low){
if(x==t) return low;
int Low;
for(int &point=cur[x];point!=-;point=then)
if(www && dis[now]==dis[x]+){
Low=dfs(now,min(low,www));
if(Low){
www-=Low;node[point^].low+=Low;
return Low;
}
}
return ;
} int main(){
#ifndef ONLINE_JUDGE
freopen("1565.in","r",stdin);
freopen("1565.out","w",stdout);
#endif
int x,y,k; scanf("%d%d",&n,&m);
t=n*m+;
for(int i=;i<t;i++) head[i]=-;
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
ind[i][j]=++Idex;
for(int i=;i<=n;i++)
for(int j=;j<=m;j++){
scanf("%d%d",&val[i][j],&k);
while(k--){
scanf("%d%d",&x,&y);
x++,y++;
add1(ind[i][j],ind[x][y]);
}
if(j!=)
add1(ind[i][j],ind[i][j-]);
}
for(int i=;i<t;i++)
if(!indeg[i]) stack[++top]=i;
while(top){
k=stack[top--],used[k]=true;
for(int point=head[k];point!=-;point=then)
if(--indeg[now]==)
stack[++top]=now;
} tot=cnt;cnt=;
for(int i=s;i<=t;i++) head[i]=-;
for(int i=;i<=tot;i++)
if(used[edge[i].u] && used[edge[i].v])
add(edge[i].u,edge[i].v,INF);
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
if(used[ind[i][j]]){
if(val[i][j]>)
add(s,ind[i][j],val[i][j]),ans+=val[i][j];
else if(val[i][j]<)
add(ind[i][j],t,-val[i][j]);
}
int flag;
while(BFS()){
memcpy(cur,head,sizeof(cur));
while(flag=dfs(s,INF))
ans-=flag;
} printf("%d",ans);
return ;
}

BZOJ1565 植物大战僵尸的更多相关文章

  1. [Android] 转移“植物大战僵尸2”存档的办法,无需root

    作者:zyl910 查过了很多文章,都说需要root后才能转移存档.但很多时候是不能root的,此时该怎么办呢? 我研究了很久,最终找到了一种办法,无需root也能转移存档. 一.备份 我用的是联想手 ...

  2. 32位汇编第六讲,OllyDbg逆向植物大战僵尸,快速定位阳光基址

    32位汇编第六讲,OllyDbg逆向植物大战僵尸,快速定位阳光基址 一丶基址,随机基址的理解 首先,全局变量的地址,我们都知道是固定的,是在PE文件中有保存的 但是高版本有了随机基址,那么要怎么解决这 ...

  3. 原生JS实现的h5小游戏-植物大战僵尸

    代码地址如下:http://www.demodashi.com/demo/12755.html 项目介绍 本项目是利用原生js实现的h5小游戏-植物大战僵尸,主要结合了一下自己对于h5小游戏的理解,结 ...

  4. 植物大战僵尸:寻找阳光掉落Call调用

    实验目标:通过遍历阳光产生的时间,寻找阳光产生的本地Call,使用代码注入器注入,自定义生成阳光 阳光CALL遍历技巧: 进入植物大战僵尸-> 当出现阳光后->马上搜索未知初始数值 返回游 ...

  5. java小项目之:植物大战僵尸,这个僵尸有点冷!内附素材源码

    Java小项目之:植物大战僵尸! <植物大战僵尸>是由PopCap Games开发的一款益智策略类单机游戏,于2009年5月5日发售,这款游戏可谓是无人不知无人不晓. 在我身边,上到40岁 ...

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

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

  7. 【最大权闭合子图 tarjan】bzoj1565: [NOI2009]植物大战僵尸

    dinic+tarjan板子练手题 Description Plants vs. Zombies(PVZ)是最近十分风靡的一款小游戏.Plants(植物)和Zombies(僵尸)是游戏的主角,其 中P ...

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

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

  9. 【BZOJ1565】 植物大战僵尸

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

随机推荐

  1. .net框架

    转载:http://www.cnblogs.com/JimmyZhang/archive/2012/11/27/2790759.html 本书是一本讲解.NET技术的书籍,目标读者群也是在.NET框架 ...

  2. winform中嵌入Ppt、Word、Excel

    1.下载DsoFramer_KB311765_x86.exe 2.安装,默认路径安装C:\DsoFramer. 3.注册:开始菜单——>运行 输入:regsvr32 C:\DsoFramer\d ...

  3. [原创] 初识Agile/CMMI/Scrum

    一.背景介绍 在朋友(aehyok)的建议下,初步去了解Visual Studio Online,简称VS Online(即原来的 Team Foundation Service,简称TFS) VS ...

  4. c#中操作word文档-一、模板方式写入

    转载自:http://blog.csdn.net/fujie724/article/details/5443322 适合模板写入 今天正好有人问我,怎么生成一个报表式的Word文档. 就是文字的样式和 ...

  5. NetCat使用手册

    简介:   在网络工具中有“瑞士军刀”美誉的NetCat(以下简称nc),在我们用了N年了至今仍是爱不释手.因为它短小精悍(这个用在它身上很适合,现在有人已经将其修改成大约10K左右,而且功能不减少) ...

  6. [译]Cassandra的数据读写与压缩

    本文翻译主要来自Datastax的cassandra1.2文档.http://www.datastax.com/documentation/cassandra/1.2/index.html.此外还有一 ...

  7. android中常用菜单(menu)的基本知识

    (一)选项菜单 1.简单的创建菜单: @Override public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMe ...

  8. AngularJs记录学习04

    <html> <head> <title>Angular JS Views</title> <script src="js/Angula ...

  9. web开发中,前端javascript代码的组织结构

    网页包含三个层次: 结构(HTML) 表现(CSS) 行为(javascript) web标准中,三者要分离,网页源代码由三部分组成:.html文件..css文件和.js文件.就是说html文件中不应 ...

  10. hdu 5104 Primes Problem

    题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5104 Primes Problem Description Given a number n, ple ...