题意:

给出一片n*m的草坪,上面每个点有一个植物;

现在由你来从最右面放出一些僵尸来进攻这些植物;

僵尸到一个植物面前的时候就可以吃掉这个植物,并且得到这个植物的的得分(可正可负);

每个植物可以攻击几个位置,并且僵尸只能从右面出发,也就是说在吃掉右面的植物之前不可能吃掉左面的;

僵尸是无限的,求最大得分;

n<=20,m<=30;

题解:

原来这个就是最大权闭合子图啊。。似乎以前没刷过的样子= =

总之先建图:

将每个植物向能保护它的植物连流量为无穷的边;

从源点向正得分植物连流量为得分的边;

从负得分植物向汇点连流量为得分相反数的边;

最后用所有正权值的和减去最小割就是了;

这样建图解决最大权闭合子图问题是正确的,感性上讨论一下各种边就差不多理解的了吧;

然而通常的最大权闭合子图都是拓扑图,在这个问题中可以有环存在;

所以有些点是永远也不可能取到的,这些点我们不要,也就是拓扑排序之后排不到的点;

然后建图就是正确的了,跑最大权闭合子图即可;

代码:

#include<queue>
#include<stdio.h>
#include<string.h>
#include<algorithm>
#define N 40
#define E 400000
using namespace std;
int next[E],to[E],flow[E],head[N*N],ce=1;
int dis[N*N],S,T,sum;
int val[N*N];
queue<int>q;
void add(int x,int y,int fl)
{to[++ce]=y;flow[ce]=fl;next[ce]=head[x];head[x]=ce;to[++ce]=x;flow[ce]=0;next[ce]=head[y];head[y]=ce;
}
bool BFS()
{int x,i;memset(dis,0,sizeof(dis));dis[S]=1;q.push(S);while(!q.empty()){x=q.front(),q.pop();for(i=head[x];i;i=next[i]){if(flow[i]&&!dis[to[i]]){dis[to[i]]=dis[x]+1;q.push(to[i]);}}}return dis[T]!=0;
}
int dfs(int x,int lim)
{if(x==T) return lim;int ret=0,i,temp;for(i=head[x];i;i=next[i]){if(flow[i]&&dis[to[i]]==dis[x]+1){temp=dfs(to[i],min(flow[i],lim-ret));ret+=temp;flow[i]-=temp,flow[i^1]+=temp;if(ret==lim)return ret;}}if(!ret)   dis[x]=0;return ret;
}
namespace Graph
{int next[E],to[E],head[N*N],ce;int in[N*N];bool vis[N*N];void add(int x,int y){to[++ce]=y;next[ce]=head[x];head[x]=ce;in[y]++;}void slove(int n,int m){int i,x,tot=n*m;for(x=0;x<tot;x++){if(!in[x])q.push(x);}while(!q.empty()){x=q.front(),q.pop();vis[x]=1;for(i=head[x];i;i=next[i]){in[to[i]]--;if(!in[to[i]])q.push(to[i]);}}for(x=0;x<tot;x++){if(!vis[x])  continue;if(val[x]>=0)::add(S,x,val[x]),sum+=val[x];else::add(x,T,-val[x]);for(i=head[x];i;i=next[i]){if(vis[to[i]])::add(to[i],x,0x3f3f3f3f);}}}
}
int main()
{int n,m,w,i,j,k,x,y,ans;scanf("%d%d",&n,&m);S=n*m,T=S+1;for(i=0,sum=0;i<n;i++){for(j=0;j<m;j++){if(j)    Graph::add(i*m+j,i*m+j-1);scanf("%d%d",&val[i*m+j],&w);for(k=1;k<=w;k++){scanf("%d%d",&x,&y);Graph::add(i*m+j,x*m+y);}}}Graph::slove(n,m);ans=0;while(BFS())ans+=dfs(S,0x3f3f3f3f);printf("%d\n",sum-ans);return 0;
}

bzoj-1565 植物大战僵尸相关推荐

  1. BZOJ 1565 [NOI2009]植物大战僵尸

    title: 'BZOJ 1565 [NOI2009]植物大战僵尸' categories: BZOJ date: 2016-3-20 9:30:00 tags: [最小割] Description ...

  2. 女友让我破解植物大战僵尸!我干脆撸了一款一样的....翻身舔狗把歌唱呀

    今天给大家分享的开源项目可以说非常适合入门,还比较好玩,更是一个有故事的项目.既能满足想学习的读者,又能满足那些喜欢八卦的读者. 提到植物大战僵尸相信大部分读者都不陌生,可以说是塔防类游戏的鼻祖.就鸟 ...

  3. 【植物大战僵尸2】算法 笔记

    文章目录 春日活动--旅行原木--特殊事件--植物挑战_超能花菜 春日活动--暖春植树--初春挑战 地图解锁顺序建议 花园战争 超z联赛 无尽挑战 无尽常用植物及装扮 植物排名 春日活动–旅行原木–特 ...

  4. pvz安卓服务器维修礼包码,植物大战僵尸2礼包兑换码大全2020最新版

    植物大战僵尸2礼包码2020最新版是一款能够让玩家体验烧脑塔防大战的放置游戏,拥有经典的游戏规则设计,带来的玩法也会让每个玩家体验最为精彩的体验,每个僵尸都有着自己的特性,游戏之中的每一种植物都有自己 ...

  5. [日记]游长白遇梅花,植物大战僵尸

    "旅客朋友们--"我因为坐在面包车副驾驶的位置,所以假装自己是导游,"您即将经过的景点是'董眼镜修车铺',请向车窗的左侧观看--" 董眼镜修车铺 "董 ...

  6. 基于python开发植物大战僵尸

    目录 摘要 2 一, 引言 3 1.1中国游戏产业的现状 3 1.2中国游戏产业的未来发展局势 4 1.3植物大战僵尸游戏的发展状况 4 二.系统结构 5 2.1 Python3.8.2 IDLE 简 ...

  7. 植物2 IOS 怎么实名认证_植物大战僵尸2未来世界22天困难怎么过关 植物阵容推荐...

    植物大战僵尸2未来世界22天困难攻略 植物大战僵尸2未来世界22天有很多小伙伴都卡在这里,难度是一定的,那么到底要怎么过呢?下面就和小编一起去了解一下吧! 植物大战僵尸未来世界第二十二天过关条件是指挥 ...

  8. 谈 Scratch 版“植物大战僵尸”

    请先查看  Scratch经典游戏作品:植物大战僵尸  并下载资源. Python 版"植物大战僵尸"下载链接:https://download.csdn.net/download ...

  9. 计蒜客-植物大战僵尸

    嘟嘟最近迷恋上了一款游戏:植物大战僵尸.在梦中,他梦到了一个更加刺激的植物大战僵尸版本.有 n 个僵尸从起点出发,每个僵尸占用一个独立的直线道路.第 i 个僵尸在第一秒的速度为 f_if​i​​ ,之 ...

  10. 前女友让我撸个植物大战僵尸,我一怒之下把代码开源了...

    今天给大家分享的开源项目可以说非常适合入门,还比较好玩,更是一个有故事的项目.既能满足想学习的读者,又能满足那些喜欢八卦的读者. 提到植物大战僵尸相信大部分读者都不陌生,可以说是塔防类游戏的鼻祖.就鸟 ...

最新文章

  1. Hubble.net 简介及与Lucene.net 对比测试
  2. python 笔记 之 类的继承与重写
  3. DataView.RowFilter使用
  4. 深度学习训练的时候gpu占用0_26秒单GPU训练CIFAR10,Jeff Dean也点赞的深度学习优化技巧...
  5. 原理系列:Spark1.x 生态圈一览
  6. mongodb 无法查出数据_MongoDB,再见还是再等等?
  7. Maven + Docker
  8. No Dialect mapping for JDBC type 错误分析,Hibernate和数据库类型对应
  9. BZOJ 1606: [Usaco2008 Dec]Hay For Sale 购买干草
  10. 合同管理系统操作手册
  11. 移动端登录后,携带token请求其他页面接口提示token验证失败
  12. 做一个人脸识别相关的毕业设计
  13. Wordpress替换Gravatar用户头像,让wordpress会员头像本地化提高加载速度(附代码)
  14. Python 数据可视化的 3 大步骤,你知道吗?
  15. 计算机中怎样重新安装ps,【2人回答】电脑要重装系统,不想重装Photoshop CS6,怎么办?-3D溜溜网...
  16. hash路由实现微信登陆后的重定向
  17. 机器人的弊议论文_机器人的利与弊议论文
  18. 塔石E18D mqtt连接onenet
  19. 《离散时间信号处理学习笔记》—z变换(二)
  20. 尿片与啤酒不得不说的故事

热门文章

  1. SVD(奇异值矩阵分解) 转载(+师兄ppt)
  2. 软件流程和管理(七):个人、激励和团队
  3. Windows Server 2008 定时任务卡住了不执行
  4. 保姆级教程!将 Vim 打造一个 IDE (Python 篇)
  5. 语音识别服务_语音识别服务厂商_腾讯云语音识别服务 - 云+社区 - 腾讯云
  6. UDT 最新源码分析(五) -- 网络数据收发
  7. udt的java实现
  8. org.apache.shiro.session.ExpiredSessionException: Session with id异常排查
  9. 解决Django migrate: Your models in app(s): ‘Mymodelclassname‘ have changes that are not yet reflected
  10. 为什么要用Modbus转MQTT网关?