BZOJ2948 : [Poi2001]绿色游戏

维护一个保护集合$S$,表示哪些点$A$可能胜利。

首先将所有绿点加入$S$。

$1.$对于一个不在$S$的$A$点,若它存在某个后继在$S$中,则将其加入$S$。

$2.$对于一个不在$S$的$B$点,若它所有后继都在$S$中,则将其加入$S$。

通过拓扑可以$O(n+m)$求出$S$集合,那么剩下的点$A$必败。

$1.$对于一个在$S$的$A$点,若它所有后继都不在$S$中,则将其从$S$中移除。

$2.$对于一个在$S$的$B$点,若它存在某个后继不在$S$中,则将其从$S$中移除。

同样可以通过拓扑$O(n+m)$求出最终的$S$集合。

这样会导致某些绿点不在$S$中,那么它们就失去了作为绿点的价值,将其标记为白点。

重复运行这个算法$O(n)$轮直到所有绿点都发挥了价值,此时$S$中的点$A$必胜。

时间复杂度$O(n(n+m))$。

#include<cstdio>
const int N=3010,M=30010;
int n,m,i,j,x,c[N],d[N],g[N],v[M],nxt[M],ed,q[N],vis[N],deg[N],cnt;
inline void add(int x,int y){d[v[++ed]=x]++;nxt[ed]=g[y];g[y]=ed;}
bool solve(){
  int i,x,h=1,t=0;
  for(i=1;i<=n;i++){
    vis[i]=c[i],deg[i]=d[i];
    if(vis[i])q[++t]=i;
  }
  while(h<=t)for(i=g[q[h++]];i;i=nxt[i])if(!vis[x=v[i]])
    if(x<=m)vis[q[++t]=x]=1;
    else if(!(--deg[x]))vis[q[++t]=x]=1;
  for(i=h=1,t=0;i<=n;i++){
    deg[i]=d[i];
    if(!vis[i])q[++t]=i;
  }
  while(h<=t)for(i=g[q[h++]];i;i=nxt[i])if(vis[x=v[i]])
    if(x>m)vis[q[++t]=x]=0;
    else if(!(--deg[x]))vis[q[++t]=x]=0;
  for(t=0,i=1;i<=n;i++)if(c[i]&&!vis[i])c[i]=0,t=1;
  return t;
}
int main(){
  scanf("%d%d",&m,&n);n+=m;
  for(i=1;i<=n;i++)for(scanf("%d%d",&c[i],&j);j--;add(i,x))scanf("%d",&x);
  while(solve());
  for(i=1;i<=n;i++)if(vis[i])q[++cnt]=i;
  for(printf("%d\n",cnt),i=1;i<=cnt;i++)printf("%d\n",q[i]);
  return 0;
}

  

时间: 2024-12-17 22:25:45

BZOJ2948 : [Poi2001]绿色游戏的相关文章

病毒木马查杀第013篇:一个基于.NET的“敲竹杠”病毒研究

一.前言 恶意程序发展至今,其功能已经从最初的单纯破坏,不断发展为隐私的窥探,信息的盗取,乃至如今非常流行的"敲竹杠"病毒,用于勒索.可见随着时代的发展,病毒的作者们往往也是想利用自己的技术来获取不义之财,变得越来越功利化了.而本系列文章也顺应了这个发展,从病毒讨论到木马,进而来到了"敲竹杠"病毒的讨论上来. 二.什么是"敲竹杠"病毒 其实"敲竹杠"病毒的行为很简单,它就是篡改我们的计算机的开机密码,然后病毒作者留下个人的联系

i7vpn加速器,玩游戏,上国外网站必备绿色软件

i7VPN是专为各类网游玩家.软件发烧友.网络办公.影音冲浪网虫等个人用户提供网络加速服务的新型产品,能有效减少网络延时,使网络互访再无拥挤的感觉,让您在任何情况下都能体验上网加速的快乐! i7VPN,是i7VPN网开发的最新产品,是一种新型的虚拟专用网络构建工具,它能够在 Internet网络中建立一条虚拟的专用通道,让两个远距离的网络客户在这个专用的网络通道中相互传 递资料而不会被外界干扰或窃听.通过特殊的加密的通讯协议在连接在Internet上的位于不同地方的两个或多个企业内部网之间建立一

python实现自动找茬游戏

http://blog.csdn.net/pipisorry/article/details/46564967 找茬游戏地址[美女大家来找茬] 游戏窗口探查 下载安装PyWin32库(对windows接口的Python封装)http://sourceforge.net/projects/pywin32/,但不能直接点Download图标,不然下下来是一个Readme.txt,点"Browse All Files"寻找需要的版本. 使用spy++找到窗口句柄(或者找到窗口类名lpClas

Android游戏开发之主角的移动与地图的平滑滚动

人物移动地图的平滑滚动处理 玩过rpg游戏的朋友应该都知道RPG的游戏地图一般都比较大 今天我和大家分享一下在RPG游戏中如何来处理超出手机屏幕大小的游戏地图. 如图所示为程序效果动画图 地图滚动的原理 在本人之前博客的文章中介绍过人物在屏幕中的移动方式,因为之前拼的游戏地图是完全填充整个手机屏幕的,所以无需处理地图的平滑滚动.这篇文章我着重的向 大家介绍一下控制人物移动后地图滚动的处理方式.举个例子 如上图所示 比如人物向右移动,如果地图贴在屏幕左边边界 将先移动人物在地图的坐标,当人物在屏幕

软件游戏同时运行

我相信有很多网友有过这样的经历,玩个游戏发现能同时上两个号那是有多好啊,上个QQ,或者是上微信,有的聊天爱好者会有很多的QQ和微信,于是现在的烦恼就来了,我们怎样才能让手机同时存在两个相同的软件呢?    又让他们同时存在同时运行呢, 本软件来自www.jiyw.com 点击链接直接下载http://pan.baidu.com/s/1slEaz0L 应用介绍 机友精灵是一款能实现应用多开的黑科技产品,一个手机能实现应用多个不同账户的同时登陆,接收消息互不影响. [机友精灵]你不得不玩的五大理由:

Chrome自带恐龙小游戏的源码研究(七)

在上一篇<Chrome自带恐龙小游戏的源码研究(六)>中研究了恐龙的跳跃过程,这一篇研究恐龙与障碍物之间的碰撞检测. 碰撞盒子 游戏中采用的是矩形(非旋转矩形)碰撞.这类碰撞优点是计算比较简单,缺点是对不规则物体的检测不够精确.如果不做更为精细的处理,结果会像下图: 如图所示,两个盒子虽然有重叠部分,但实际情况是恐龙和仙人掌之间并未发生碰撞.为了解决这个问题,需要建立多个碰撞盒子: 不过这样还是有问题,观察图片,恐龙和仙人掌都有四个碰撞盒子,如果每次Game Loop里都对这些盒子进行碰撞检测

本元鼠标自动点击器 v1.31 官方绿色版

软件名称: 本元鼠标自动点击器软件语言: 简体中文授权方式: 免费软件运行环境: Win 32位/64位软件大小: 516KB图片预览: 软件简介:本元鼠标自动点击器是一款免费绿色版的鼠标自动点击器,它可以通过录制回放鼠标动作的方法,实现模拟任何鼠标的操作,支持自定义鼠标坐标点击,力求做到精确的定位,是网页游戏的好帮手本元鼠标自动点击器主要功能1.可分别模拟左键单击.左键双击.右键单击.右键双击四种鼠标动作2.可用左键从左至右或从右至左连续单击弹出的信息框按钮区3.可录制和播放指针移动.左键单击

迟到的儿童节礼物——小游戏三件套:扫雷,俄罗斯方块,数独

人的事情要么是饿出来了要么就是吃饱了撑出来的 其实写完刚好是在儿童节前两天,本打算作为儿童节礼物送给大家,结果新账号要3天才能发文章到主页,于是拖到了现在...事情是这样开始的:有一天,闲得蛋疼,看见同事在玩扫雷,然后就想着自己做一个,于是花了三天时间写一个自己的扫雷...写完扫雷感觉不过瘾,于是接着又写了俄罗斯方块,一晃又是三天...写完俄罗斯方块之后,觉得事不过三,再来一个,然后选了数独,其实知道这个应该是最有难度的,果然也纠结了三天数独生成算法才勉强写完...好了废话不多说,上图. 1. 

【分享】VNR翻译日语游戏汉化简易图解教材

请[点击图片]到新链接看[原图].不然博客自动缩小图,看不清图解. 上面是用美少女万花镜来测试新版VNR翻译的如何,结果比我预料还要好.以前旧版根本比不上新版的.翻译非常准确.看了我上面的简易VNR图解,应该了解了怎样翻译了吧.接下来就是D.C.III.RX翻译. 来看下翻译效果吧. 最新版文本设置,其它还都是一样. D.C.III RX在VNR下全屏化 如果出现部分打开GAL游戏VNR却不自动弹出翻译窗口和翻译不出文本,请看下面解决方法. 提取文本后无法翻译或翻译不完整,不通顺解决方法 D.C