当前位置: 首页 > news >正文

2023 CCPC 华为云计算挑战赛 hdu7399 博弈,启动!(图上博弈/枚举+逆向有向图sg函数)

题目

给定t(t<=200)组样例,

每次给定一个n(n<=300)个左边的点m(m<=300)个右边的点的二分图,图无重边

所有边总量不超过5e5

初始时棋子可以被放置在任意一个点上,

若被放置在左边,则Alice先走;被放置在右边,则Bob先走

每次可以选择一个当前点有出边的点,走到那个点上,如果当前点没有出边,则游戏结束

Alice想访问所有点无数次,Bob想阻止Alice这么做,双方均采取最优策略

问Alice是否有必胜策略(Alice可以指定起点在哪里)

思路来源

heltion+蔡老师

题解

问题等价于,

只要Bob能找到一个点,使Alice不能无限次经过,则Bob胜,否则Alice胜

称这样的点为防御点

n=300,所以考虑枚举防御点

对于枚举的防御点,先判断一下可达性,如果有点到不了防御点,则Alice全局必败

防御点是一个终态点,如果Alice不能到防御点,则Bob不能去指向防御点的点,以此类推…

已知终态不知起始态,其实与期望dp类似,启发我们建反图后从防御点拓扑排序
 

然后考虑类似拓扑排序的更新流程,实际就是sg函数的思想,

初始时,将防御点放入队列,

对二分图上的点,每个点计算一个dp值,

如果防御点位于左侧,则Alice到这个点就视为(在只考虑这个防御点时)获胜,置dp值为1

如果防御点位于右侧,则Bob到这个点就视为失败,置dp置为0

如果一个点的所有下游(反图的上游)都是对方的必胜点,则这个点是必败点

如果一个点的所有下游(反图的上游)存在对方的必败点,则这个点是必胜点

如果一个点确定了必胜/必败态,就将这个点放入队列,直至更新完所有点

跑完这一轮后,Alice必败&Bob必胜的起点需要被排除

此时,有一些点可能是没被更新过的,即拓扑排序中的环,

这些点的特性是:

1. 不存在下游是对方的必败点

2. 存在一部分下游点是对方的必胜点,

3. 另一部分下游是状态未确定的点

那如果Alice和Bob在这些点上玩的话,都只会走向状态未确定的点,使Alice永远走不到防御点

所以这些状态未确定的点,也需要被过滤排除

枚举完一个防御点就会过滤掉一些点,

枚举完所有点后,没被过滤掉的点,就是Alice的必胜起点,若不存在则Bob必胜

其实感觉是很典的拓扑图上sg问题

代码

#include<bits/stdc++.h>
using namespace std;
#define rep(i,a,b) for(int i=(a);i<=(b);++i)
#define per(i,a,b) for(int i=(a);i>=(b);--i)
typedef long long ll;
typedef double db;
typedef pair<ll,ll> P;
#define fi first
#define se second
#define pb push_back
#define dbg(x) cerr<<(#x)<<":"<<x<<" ";
#define dbg2(x) cerr<<(#x)<<":"<<x<<endl;
#define SZ(a) (int)(a.size())
#define sci(a) scanf("%d",&(a))
#define pt(a) printf("%d",a);
#define pte(a) printf("%d\n",a)
#define ptlle(a) printf("%lld\n",a)
#define debug(...) fprintf(stderr, __VA_ARGS__)
const int N=605;
int T,n,m,u,v,k,c,dp[N],deg[N],d[N];
bool no[N],can[N];
vector<int>e[N];
void add(int u,int v){e[v].pb(u);deg[u]++;
}
bool L(int x){return x<n;
}
bool sol(int s){memset(dp,-1,sizeof dp);for(int i=0;i<n+m;++i)can[i]=0,d[i]=deg[i];queue<int>q;q.push(s);dp[s]=L(s);//点s表示GG想走到这里YY不想走到这里,位于左侧GG赢,位于右侧YY输can[s]=1;while(!q.empty()){int u=q.front();q.pop();for(auto &v:e[u]){can[v]=1;--d[v];if(~dp[v])continue;if(dp[u]==0)dp[v]=1;if(dp[u]==1 && !d[v])dp[v]=0;if(~dp[v])q.push(v);}}for(int i=0;i<n+m;++i){if(!can[i])return 0;if(L(i) && dp[i]==0)no[i]=1;if(!L(i) && dp[i]==1)no[i]=1;if(dp[i]==-1)no[i]=1;}return 1;
}
bool solve(){for(int i=0;i<n+m;++i){if(!deg[i])return 0;}memset(no,0,sizeof no);for(int i=0;i<n+m;++i){if(!sol(i))return 0;}for(int i=0;i<n+m;++i){if(!no[i])return 1;}return 0;
}
int main(){scanf("%d",&T);while(T--){scanf("%d%d",&n,&m);for(int i=0;i<n+m;++i){e[i].clear();deg[i]=0;}for(int i=0;i<n;++i){scanf("%d",&k);for(int j=1;j<=k;++j){scanf("%d",&v);add(i,n+v);}}for(int i=0;i<m;++i){scanf("%d",&k);for(int j=1;j<=k;++j){scanf("%d",&v);add(n+i,v);}}puts(solve()?"Yes":"No");}return 0;
}

相关文章:

2023 CCPC 华为云计算挑战赛 hdu7399 博弈,启动!(图上博弈/枚举+逆向有向图sg函数)

题目 给定t(t<200)组样例&#xff0c; 每次给定一个n(n<300)个左边的点m(m<300)个右边的点的二分图&#xff0c;图无重边 所有边总量不超过5e5 初始时棋子可以被放置在任意一个点上&#xff0c; 若被放置在左边&#xff0c;则Alice先走&#xff1b;被放置在右边&a…...

Unity之 Vector3 的详细介绍以及方法的介绍

文章目录 总的介绍小试牛刀相关的描述的参数看个小例子 总的介绍 当涉及到Unity中的Vector3类时&#xff0c;以下是一些常用的方法和操作&#xff1a; magnitude 方法&#xff1a;返回向量的长度。 float length vector.magnitude;sqrMagnitude 方法&#xff1a;返回向量的平…...

Postgresql部署及简单操作

目录 1、介绍 2、什么是PostgreSQL 3、PostgreSQL 的特点 4、数据库定为 5、环境准备 6、编译安装 6.1 安装依赖包 6.2 下载安装包 6.3 创建用户 6.4 创建 postgresql数据目录并授权 6.5 上传压缩包并解压 6.6 编译postgresql源码 6.7 配置环境变量 6.8 初始化数…...

rabbitmq集群搭建

升级步骤 1.升级包上传 1.1上传erlang、rabbitmq安装包 创建对应升级目录 将安装包otp_src_22.1.7.tar.gz上传到新创建的目录下 将安装包rabbitmq-server-generic-unix-3.8.9.tar.xz上传到新创建的目录下 1.2 执行解压命令tar -zxvf otp_src_22.1.7.tar.gz xz -d rabbitmq-s…...

C++ 二叉搜索树的概念特性

1. 二叉搜索树 1.1 二叉搜索树概念 二叉搜索树又称二叉排序树&#xff0c;它或者是一棵空树 &#xff0c;或者是具有以下性质的二叉树 : 若它的左子树不为空&#xff0c;则左子树上所有节点的值都小于根节点的值 若它的右子树不为空&#xff0c;则右子树上所有节点的值都大…...

7、Spring_AOP

一、Spring AOP 简介 1.概述 对于spring来说&#xff0c;有三大组件&#xff0c;IOC&#xff0c;ID&#xff0c;AOP aop概述&#xff1a;AOP(Aspect Oriented Programming)面向切面编程。 作用&#xff1a;不改变原有代码设计的基础上实现功能增强 例子 传统打印日志 使用…...

QChart:数据可视化(用图像形式显示数据内容)

1、数据可视化的图形有&#xff1a;柱状/线状/条形/面积/饼/点图、仪表盘、走势图&#xff0c;弦图、金字塔、预测曲线图、关系图、数学公式图、行政地图、GIS地图等。 2、在QT Creator的主页面&#xff0c;点击 欢迎》示例》右侧输入框 输入Chart&#xff0c;即可查看到QChar…...

【python】Leetcode(primer-set)

文章目录 78. 子集&#xff08;集合的所有子集&#xff09;90. 子集 II&#xff08;集合的所有子集&#xff09; 更多 leetcode 题解可参考&#xff1a;【Programming】 78. 子集&#xff08;集合的所有子集&#xff09; 给定一组不含重复元素的整数数组 nums&#xff0c;返回…...

【LVS集群】

目录 一、集群概述 1.负载均衡技术类型 2.负载均衡实现方式 二、LVS结构 1.三层结构 2.架构对象 三、LVS工作模式 四、LVS负载均衡算法 1.静态负载均衡 2.动态负载均衡 五、ipvsadm命令详解 1. -A 2. -D 3. -L 4. -a 5. -d 6. -l 7. -t 8. -s 9. -r 10. -…...

软考高级系统架构设计师系列之:论文题目类型、论文考试大纲、历年考试论文真题汇总、论文写作原则、论文写作常见问题、论文评分标准

软考高级系统架构设计师系列之:论文题目类型、论文考试大纲、历年考试论文真题汇总、论文写作原则、论文写作常见问题、论文评分标准 一、论文写作概述二、论文题目类型三、论文考试大纲1.系统建模2.软件架构设计3.系统设计4.分布式系统设计5.系统的可靠性分析与设计6.系统的安…...

完整的application.xml

<!-- 资源文件配置 --><beans profile"dev"><bean class"com.ningpai.util.CustomPropertyPlaceholderConfigurer"><property name"locations"><list><value>classpath:/com/ningpai/web/config/dev/jdbc.p…...

C语言:运算符优先级

一、优先级&#xff08;常使用的运算符&#xff09; 见表格 二、注意 总体原则&#xff1a;算术运算符 > 关系运算符 > 逻辑运算符 > 赋值运算符 同一级别下的运算符的运算次序由表达式的结合方向决定 运算符注释级别( )圆括号1[ ]数组下标1后置后置2后置--后置--2前置…...

Android GreenDao数据库升级(附Demo)

前言 大家好久不见&#xff0c;一转眼马上八月份下旬了&#xff0c;最近由于工作比较忙&#xff0c;没时间给大家更新博文。百忙之中抽出时间&#xff0c;给大家来更新一篇关于GreenDao3数据库的升级。 关于GreenDao的详细介绍以及一些逻辑性的增、删、改、查等&#xff0c;可以…...

剑指 Offer 32 - III. 从上到下打印二叉树 III

目录 使用函数实现 使用双端队列实现 请实现一个函数按照之字形顺序打印二叉树&#xff0c;即第一行按照从左到右的顺序打印&#xff0c;第二层按照从右到左的顺序打印&#xff0c;第三行再按照从左到右的顺序打印&#xff0c;其他行以此类推。 例如: 给定二叉树: [3,9,20,nu…...

【QT5-自我学习-线程qThread移植与使用-通过代码完成自己需要功能-移植小记3】

【QT5-自我学习-线程qThread移植与使用-通过代码完成自己需要功能-移植小记3】 1、前言2、实验环境3、自我总结&#xff08;1&#xff09;文件的编写&#xff08;2&#xff09;信号与槽的新理解&#xff08;3&#xff09;线程数据的传递 4、移植步骤第一步&#xff1a;添加新文…...

后端开发12.商品模块

概述 简介 商品模块这个设计的非常复杂 效果图 数据库...

/usr/bin/containerd: Operation not permitted

问题 今天在重启docker程序的时候一直启动不起来&#xff0c;通过systemctl status docker和jourctl -xu docker也没有发现什么有用的报错信息&#xff0c;无奈只好查看/var/log/message&#xff0c;发现以下错误提示&#xff1a; Started containerd container runtime Start…...

分析商务报表使用什么工具?

传统的BI分析商务报表存在的问题 随着数字化转型的深入推进&#xff0c;企业面临着海量数据的挑战和机遇。数据是企业的重要资产&#xff0c;能够帮助企业洞察市场动态、优化业务流程、提升客户满意度、创造竞争优势。然而&#xff0c;传统的BI&#xff08;商业智能&#xff0…...

nginx文件配置

在部署前后端分离项目时&#xff0c;当前端和后端不在一个服务器上时&#xff0c;需要在前端服务器上下载nginx并配置 #hkdp-front-test 前端服务器 xxx.xxx.x.69 前端项目端口号9528&#xff0c;监听文件夹 /home/apps/vue/hkdp-manager 配置如下 server{ …...

视频云存储/安防监控EasyCVR视频汇聚平台如何通过角色权限自行分配功能模块?

视频云存储/安防监控EasyCVR视频汇聚平台基于云边端智能协同&#xff0c;支持海量视频的轻量化接入与汇聚、转码与处理、全网智能分发、视频集中存储等。音视频流媒体视频平台EasyCVR拓展性强&#xff0c;视频能力丰富&#xff0c;具体可实现视频监控直播、视频轮播、视频录像、…...

小程序定位到 胶囊的三个点大概中间

话不多说&#xff0c;先上效果图 这个功能实现思路: 首先先拿到这一张整图(快捷&#xff0c;精确)然后获取整个导航栏高度(自定义导航栏,非自定义导航栏忽略这一步)获取三个点的做偏移量&#xff0c;把高度和偏移量给到一个定位到盒子&#xff0c;这个盒子里就放这个图片&…...

Maven详解

文章目录 一、引言1.1 为什么需要 Maven&#xff1f;1.2 Maven 解决了哪些问题&#xff1f;1.2.1 添加第三方jar包1.2.2 jar包之间的依赖关系1.2.3 处理jar包之间的冲突1.2.4 获取第三方jar包1.2.5 将项目拆分成多个工程模块1.2.6 实现项目的分布式部署 二、介绍三、Maven 的特…...

音视频 ffplay命令-高级选项

选项说明-stats打印多个回放统计信息&#xff0c;包括显示流持续时间&#xff0c;编解码器参数&#xff0c;流中的当前位置&#xff0c;以及音频/视频同步差值。默认情况下处于启用状态&#xff0c;要显式禁用它则需要指定-nostats-fast非标准化规范的多媒体兼容优化-genpts生成…...

[管理与领导-44]:IT基层管理者 - 个人管理 - 从掌握管理知识开始入门:管理的常识和基础

目录 前言&#xff1a;管理框架 一、什么是管理 1.1 以终为始 1.2、资源的优化配置&#xff08;人财物、权力、时间等资源&#xff09; 1.2.1 资源的优化配置的步骤 1.2.2 管理者拥有的资源 1.2.3 管理者的权力资源 1.3 分而治之 1.3.1 分目标&#xff1a;细化和分解目…...

c#两个数进行交换

1.使用中间变量的形式 private static void Main(string[] args){int a110;int a220;ChangeNumber(ref a1,ref a2)onsole.WriteLine($"a1的值{a1},a2的值{a2}");Console.ReadLine();}public static void ChangeNumber(ref int a1, ref int a2){int temp a1;//temp10…...

JVM——类加载与字节码技术—字节码指令

2.字节码指令 2.1 入门 jvm的解释器可以识别平台无关的字节码指令&#xff0c;解释为机器码执行。 2a b7 00 01 b1 this . init&#xff08;&#xff09; return 准备了System.out对象&#xff0c;准备了参数“hello world”,准备了对象的方法println(String)V&#xff…...

同步与互斥——相互合作,相互制约

选择题&#xff1a;互斥机制&#xff0c;信号量解决互斥同步 大题&#xff1a;PV操作处理进程的同步与互斥 目的&#xff1a;解决临界区资源使用问题 一、临界资源 一次仅允许一个进程使用的资源 二、同步与互斥 同步&#xff1a;AB相互合作&#xff0c;A放B取&#xff0c;…...

7个改变玩法规则的ChatGPT应用场景

ChatGPT因各种原因受到了广泛关注&#xff1a;ChatGPT可以充当各种改善生活改进工作的小助手&#xff0c;如内容写手、客户支持、语言翻译、编码专家等等。只需在你的聊天内容中添加适当的提示&#xff0c;人工智能将为你提供各项支持。[1] 1.ChatGPT作为内容写手 通过AI的帮助…...

软考高级系统架构设计师系列论文七十九:论软件产品线技术

软考高级系统架构设计师系列论文七十九:论软件产品线技术 一、摘要二、正文三、总结一、摘要 根据公司软件系统开发的需要,我们在软件的开发过程中引入了软件产品线技术,成立了基于软件产品线的项目组。本人有幸参加了该项目,并在其中担任软件分析与设计、软件产品线核心资…...

Spring IOC容器:让Java对象的管理和配置更简单

一、简介 在Java开发中&#xff0c;我们经常需要创建和使用各种Java对象&#xff0c;例如实体类&#xff0c;服务类&#xff0c;控制器类等。这些对象之间通常存在着一定的依赖关系&#xff0c;例如一个服务类可能需要调用另一个服务类或一个数据访问类的方法。为了创建和使用…...

手机app制作网站/微商怎么做推广加好友

我正在xamp中尝试upgrade mysql。我正在使用需要mariaDB v10.2.2的laravel。所以我从mariaDB website下载了latest msi package。现在我遵循以下几点来安装它们&#xff1a;安装MySQL到C&#xff1a;\ TEMP。将旧的安装文件夹设为mysql_old。将以下文件夹“bin&#xff0c;incl…...

如何为企业做网站/it培训班真的有用吗

转载&#xff1a;http://www.cnblogs.com/xiohao/p/3547443.html 当然&#xff0c;你需要明白异常在Java中式以一个对象来看待。并且所有系统定义的编译和运行异常都可以由系统自动抛出&#xff0c;称为标准异常&#xff0c;但是一般情况下Java 强烈地要求应用程序进行完整的异…...

网站安全的必要性/网络广告电话

Vue 教程(二十七)webpack 配置文件 webpack.config.js npm 初始化webpack.config.js开发时依赖 项目配置 在项目根目录下新建 webpack.config.js 文件&#xff0c;配置文件中 path 属性&#xff0c;需要绝对路径&#xff0c;因此需要的初始化 npm 获得 node 中内置的 path 变…...

企业网站建设的/腾讯网qq网站

股票种类很多&#xff0c;可谓五花八门、形形色色。这些股票名称不同&#xff0c;形成和权益各异。股票的分类方法因此也是多种多样的。 按股东权利分类&#xff0c;股票可分为普通股、优先股和后配股。 1&#xff0e;普通股 普通股是随着企业利润变动而变动的一种股份&#xf…...

php做动态网站如何修改密码/哪个平台可以随便发广告

很多情况下&#xff0c;初学HTML&#xff0c;会遇到中文乱码的问题。 解决方法&#xff1a;在程序开头统一规范编码格式。 1 <meta http-equiv"Content-Type" content"text/html; charsetgb2312" /><!--编码格式为GB2312--> 2 <meta http-e…...

做动态网站的软件有哪些/搭建一个网站平台需要多少钱

centos7下使用pip7.1.0安装软件&#xff0c;在shell下设置了全局http_proxy和https_proxy&#xff0c;但是每次都遇到网络超时问题&#xff0c; 后来使用pip install xxx --proxy <proxy>&#xff0c;安装成功了。...