GESP202412 八级【排队】题解(AC)

请添加图片描述
》》》点我查看「视频」详解》》》

[GESP202412 八级] 排队

题目描述

小杨所在班级共有 n n n 位同学,依次以 1 , 2 , … , n 1,2,\dots,n 1,2,,n 标号。这 n n n 位同学想排成一行队伍,其中有些同学之间关系非常好,在队伍里需要排在相邻的位置。具体来说,有 m m m 对这样的关系( m m m 是一个非负整数)。当 m ≥ 1 m\geq 1 m1 时,第 i i i 对关系( 1 ≤ i ≤ m 1\leq i\leq m 1im)给出 a i , b i a_i,b_i ai,bi,表示排队时编号为 a i a_i ai 的同学需要排在编号为 b i b_i bi 的同学前面,并且两人在队伍中相邻。

现在小杨想知道总共有多少种排队方式。由于答案可能很大,你只需要求出答案对 1 0 9 + 7 10^9+7 109+7 取模的结果。

输入格式

第一行,两个整数 n , m n,m n,m,分别表示同学们的数量与关系数量。

接下来 m m m 行,每行两个整数 a i , b i a_i,b_i ai,bi,表示一对关系。

输出格式

一行,一个整数,表示答案对 1 0 9 + 7 10^9+7 109+7 取模的结果。

样例 #1

样例输入 #1

4 2
1 3
2 4

样例输出 #1

2

样例 #2

样例输入 #2

3 0

样例输出 #2

6

样例 #3

样例输入 #3

3 2
1 2
2 1

样例输出 #3

0

提示

对于 20 % 20\% 20% 的测试数据点,保证 1 ≤ n ≤ 8 1\leq n\leq 8 1n8 0 ≤ m ≤ 10 0\leq m\leq 10 0m10

对于另外 20 % 20\% 20% 的测试数据点,保证 1 ≤ n ≤ 1 0 3 1\leq n\leq 10^3 1n103 0 ≤ m ≤ 1 0\leq m\leq 1 0m1

对于所有测试数据点,保证 1 ≤ n ≤ 2 × 1 0 5 1\leq n\leq 2\times 10^5 1n2×105 0 ≤ m ≤ 2 × 1 0 5 0\leq m\leq 2\times 10^5 0m2×105

解题思路

m = 0 m = 0 m=0 时,即求解 n n n 个同学排队的方案数: A n n A_n^n Ann,即 n ! n! n!

m = 1 m = 1 m=1 时,我们可以使用捆绑法,将两个同学打包,变为一个同学,那么方案数为 ( n − 1 ) ! (n - 1)! (n1)!

那么本题转换为,将有特殊需求的同学进行捆绑之后,剩余的同学数量。

那么如何对每一条关系做处理?假设 a a a 要在 b b b 前面,那么我们可以使用两个数组进行标记, r a = b r_a = b ra=b l b = a l_b = a lb=a,表示 a a a 的右边是 b b b b b b 的左边是 a a a。当出现 a a a 在多个人前面,或者是 b b b 在多个人后面,则直接输出 0 0 0

接下来我们考虑如何处理成环的情况,如样例三所示, 1 1 1 要在 2 2 2 前面,且 2 2 2 要在 1 1 1 前面,可以成功通过我们上述处理。考虑用并查集维护每一个特殊处理的区间,当 a a a b b b 为同一个区间时,则直接输出 0 0 0

另外本题特别坑的地方在于,某条建议可能重复出现,如下样例:

2 2
1 2
1 2

那么我们可以进行特判出现过的情况,若 r a = b r_a = b ra=b l b = a l_b = a lb=a,则表示一出现过该关系,即 continue

最后,如何判断一个是一个小团体,还是一个人呢?

可以用并查集,若当前点的祖先为自己,则算做一个人,这样一个团体仅会被算一次。

AC_Code

#include <iostream>
#include <cstring>
#include <algorithm>using namespace std;const int N = 2e5 + 10, MOD = 1e9 + 7;typedef long long LL;int n, m;
int p[N];
int l[N], r[N];int find(int x)
{if (x != p[x])p[x] = find(p[x]);return p[x];
}int main()
{cin >> n >> m;for (int i = 1; i <= n; ++ i )p[i] = i;while (m -- ){int a, b;cin >> a >> b;if (r[a] == b && l[b] == a)continue;if (r[a] || l[b] || find(a) == find(b)){cout << 0 << endl;return 0;}r[a] = b, l[b] = a;a = find(a), b = find(b);p[a] = b;}int res = 1, k = 1;for (int i = 1; i <= n; ++ i )if (find(i) == i)res = (LL)res * k ++ % MOD;cout << res << endl;return 0;
}

》》》点我查看「视频」详解》》》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/488610.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Ubuntu22.04 docker如何发布镜像(和用git差不多)

在dockerhub上创建远程仓库&#xff1a;https://hub.docker.com/ 将本地镜像打tag&#xff0c;并修改成可以上传到 dockerhub 的形式 # 查看本地镜像# 修改镜像 ## docker tag 镜像名称:标签 新的镜像名称&#xff08;要和远程仓库dockerhub上的一致&#xff09;:新的标签pus…

C#中的string操作详解-截取、分割、连接、替换等

在C#中&#xff0c;string 类提供了许多用于操作字符串的方法&#xff0c;包括截取、分隔和连接等。以下是一些常用字符串操作的介绍和实例&#xff1a; 1. 截取字符串 Substring 方法 用于从字符串中截取子字符串。 语法&#xff1a; //从startIndex开始截取&#xff0c;…

26. Three.js案例-自定义多面体

26. Three.js案例-自定义多面体 实现效果 知识点 WebGLRenderer WebGLRenderer 是 Three.js 中用于渲染场景的主要类。它支持 WebGL 渲染&#xff0c;并提供了多种配置选项。 构造器 new THREE.WebGLRenderer(parameters) 参数类型描述parametersObject可选参数对象&…

【IC面试问题:UCIE PHY LSM AXI Cache】

IC面试问题&#xff1a;UCIE PHY LSM && AXI && Cache 1 UCIE PHY LSM有几种状态&#xff1f; 以及L1和L2这两种低功耗状态有什么区别&#xff1f;2 AXI的特性&#xff1f; 通道之间有依赖关系吗&#xff1f; master和slave的valid和ready关系&#xff1f; 写数…

PPT技巧:将幻灯片里的图片背景设置为透明

在PPT中添加了图片&#xff0c;想要将图片中的背景设置为透明或者想要抠图&#xff0c;有什么方法吗&#xff1f;今天分享两个方法。 方法一&#xff1a; 添加图片&#xff0c;选中图片之后&#xff0c;点击【图片格式】功能&#xff0c;点击最左边的【删除背景】 PPT会自动帮…

池化在深度学习中增强特征的作用

目录 ​编辑 引言 池化的基本作用与特征降维 池化的定义与目的 池化操作的实现 提取关键特征与计算效率的提升 池化对特征提取的影响 平均池化的应用 提高特征鲁棒性与过拟合的防止 池化对模型鲁棒性的贡献 池化防止过拟合的原理 增强多级特征与特征表达能力的提升…

分布式 Raft算法 总结

前言 相关系列 《分布式 & 目录》《分布式 & Raft算法 & 总结》《分布式 & Raft算法 & 问题》 参考文献 《Raft一致性算法论文译文》《深入剖析共识性算法 Raft》 简介 Raft 木筏是一种基于日志复制实现的分布式容错&一致性算法。在Raft算法…

基于强化学习Q-learning算法的栅格地图路径规划算法,可以更改地图大小及起始点,可以自定义障碍物,MATLAB代码

Q-learning是一种无模型的强化学习算法&#xff0c;它允许智能体&#xff08;agent&#xff09;在与环境&#xff08;environment&#xff09;交互的过程中学习如何通过执行动作&#xff08;actions&#xff09;来最大化累积奖励&#xff08;cumulative rewards&#xff09;。 …

JAVA学习笔记——第十一章 枚举和注解

一、引出枚举类 1.先看一个需求demo package com.hspedu.enum_;public class Enumration01 {public static void main(String[] args) {Season Spring new Season("春天", "温暖");Season Summer new Season("夏天", "炎热");Seas…

腾讯微信Android面试题及参考答案(多张原理图)

Android 应用的启动流程如下&#xff1a; 当用户点击应用图标时&#xff0c;首先会通过 Launcher&#xff08;桌面启动器&#xff09;来响应这个操作。Launcher 本身也是一个 Android 应用&#xff0c;它运行在系统中&#xff0c;负责管理和显示桌面上的图标等信息。 系统会检查…

SQL server学习02-使用T-SQL创建数据库

目录 一&#xff0c; 使用T-SQL创建数据库 1&#xff0c;数据库的存储结构 2&#xff0c;创建数据库的语法结构 1&#xff09;使用T-SQL创建学生成绩管理数据库 二&#xff0c;使用T-SQL修改数据库 1&#xff0c;修改数据库的语法结构 1&#xff09;修改学生成绩管理数…

python web练习案例:基于表单类的商品管理(修改并删除商品信息)

目录 1、修改商品信息 &#xff08;1&#xff09;修改show.html页面&#xff0c;增加 修改 栏 &#xff08;2&#xff09;创建 update.html 网页&#xff0c;继承 add.html 模板 &#xff08;3&#xff09;定义视图函数 &#xff08;4&#xff09;定义路由 (5) 浏览器查看 …

前端成长之路:CSS(1)

在前端三件套中&#xff0c;CSS的主要是用于美化网页、进行页面布局的。 HTML的局限性 HTML是一个非常单纯的语言&#xff0c;它只关心内容的语义&#xff1a; 比如看见h1标签&#xff0c;就表明这是一个大标题、看见p标签&#xff0c;就表明这是一个段落、看见img标签&#…

【开源】基于SpringBoot框架的房屋租赁系统 (计算机毕业设计)+万字毕业论文 T020

系统合集跳转 源码获取链接 一、系统环境 运行环境: 最好是java jdk 1.8&#xff0c;我们在这个平台上运行的。其他版本理论上也可以。 IDE环境&#xff1a; Eclipse,Myeclipse,IDEA或者Spring Tool Suite都可以 tomcat环境&#xff1a; Tomcat 7.x,8.x,9.x版本均可 操作系统…

hbuilder 本地插件配置

插件存放路径&#xff0c;项目根目录nativeplugins下&#xff0c;没有就新建。 aar文件存放路径\nativeplugins\module\android package.json存放路径\nativeplugins\module\ 配置package.json文件 { "name": "module", "id": "modu…

内圆弧转子泵绘制工具开发

接着上期的Gerotor 泵的话题继续。最近有小伙伴找我开发一个内圆弧摆线泵的计算绘制工具&#xff0c;也就是把上次计算绘制的过程做成一个桌面应用工具&#xff0c;这样用起来会更方便、效率更高。那究竟是什么样的工具呢&#xff1f;一起来看看&#xff1a; 前面不是已经有了上…

(持续更新)linux网络编程中需要注意的内核参数与网络机制

目录 零、基本说明 一、内核参数 二、相关机制 1、GRO &#xff08;1&#xff09;适用场景 &#xff08;2&#xff09;优缺点 &#xff08;3&#xff09;相关操作 2、Nagle 算法 &#xff08;1&#xff09;基本规则 &#xff08;2&#xff09;优缺点 &#xff08;3&…

转:Quad Remesher 1.0.1使用说明(中文)

Blender 重拓扑插件&#xff0c;使用起来相当简单。不仅能自定义控制局部面数&#xff0c;还能根据不同的材质球来检测硬边进行重拓扑。 QuadRemesher2023版maya报错问题解决方案 马奇诺 编辑于 2023年05月11日 04:39 收录于文集 ChadTips_Maya 1篇 新版maya导入QuadRemes…

探索级联CMOS运算放大器的设计:提升电源抑制比(PSRR)与共模输入范围

在模拟电子学领域&#xff0c;运算放大器&#xff08;Op Amp&#xff09;作为信号放大的核心组件&#xff0c;其性能直接影响到整个电路的稳定性和效率。随着技术的进步&#xff0c;对运算放大器的性能要求也在不断提高&#xff0c;尤其是在电源抑制比&#xff08;PSRR&#xf…

单元测试SpringBoot

添加测试专用属性 加载测试专用bean Web环境模拟测试 数据层测试回滚 测试用例数据设定