P11380 [GESP202412 八级] 排队

news/2025/3/28 21:18:33/文章来源:https://www.cnblogs.com/ClassmateE/p/18785357

前言

本题考察对 排列组合并查集 的掌握情况。

题面大意

\(n\) 个同学,编号以 \(1,2,3...,n-1,n\) 编号,有 \(m\) 条关系,第 \(i\) 对关系包含两个正整数,分别为 \(a_i, b_i\) ,表示 \(a_i\) 号同学要排在 \(b_i\) 号同学的前面,问有多少种方案。

分析

我们取一组数据来解析:

Input :

4 2
1 3
2 4

Output :

2

这一组数据 \(1\) 号同学需要排在 \(3\) 号同学的前面 ,\(2\) 号同学需要排在 \(4\) 号同学的前面。我们可以将这两个关系看为两个绑定在一起的整体 ,但是这样样例还是不够广泛,我们再来举个栗子


Input :

4 2
1 2
2 3

Output :

2

这一组数据 \(1\) 号同学需要再 \(2\) 号同学的前面,\(2\) 号同学需要 \(3\) 号同学的前面,我们注意到,\(1,2,3\) 号同学需要排在一起,那么我们就把这三位同学绑定成一个整体 然后 \(4\) 号同学单独一个整体,那么就计算整体的全排列个数就可以了。

解决

不难想到并查集,考虑并查集

\[fa_i = \begin{cases} fa_{fa_i} & i \notin a\\ i & i ∈ a \end{cases} \]

最后再处理一下 \(0\) 的情况


代码如下

#include<bits/stdc++.h>
#define LL long long
using namespace std;const int maxn = 2e5 + 5, mod = 1e9 + 7;
LL n, m, fa[maxn], ans = 1, sum;
bool f1[maxn], f2[maxn];
struct whole
{int x, y;
}a[maxn];
bool cmp(whole a, whole b)
{return a.x < b.x;
}
int find(int x)
{if(x == fa[x]) return x;else return fa[x] = find(fa[x]);
}
void merge(int x, int y)
{int fx = find(x), fy = find(y);if(fx == y){cout << 0;exit(0);}if(fx != fy)fa[y] = x;
}int main()
{cin >> n >> m;for(int i = 1; i <= n; i++)fa[i] = i;for(int i = 1; i <= m; i++)cin >> a[i].x >> a[i].y;sort(a + 1, a + 1 + m, cmp);for(int i = 1; i <= m; i++){if(a[i].x == a[i - 1].x and a[i].y != a[i - 1].y){cout << 0;exit(0);}merge(a[i].x, a[i].y);}for(int i = 1; i <= n; i++)if(fa[i] == i)sum++;for(int i = 1; i <= sum; i++)ans = (ans * i) % mod;cout << ans;return 0;
}

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

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

相关文章

harmony OS NEXT-TypeScript

TS基础内容 1.1 TypeScript简介TypeScript是由微软开发,是基于JavaScript的一个扩展语言 TypeScript包含了JavaScript的所有内容,即:TypeScript是JavaScript的超能 TypeScript增加了:静态类型检查、接口、泛型等很多现代开发特性,因此适合更大型的项目开发 TypeScript需要…

Unreal最佳实践——TSharedRef和Ptr的使用和坑

A:管理比较麻烦的时候用,像slate这种用得就多 A:这种东西能不用还是别用,性能肯定是低的(低不了多少),还有一个是要注意循环引用 A:写一个ptr记得在destruction里面加一个,或者endplay加一下,就能避免泄漏问题 养成习惯就行了

用户说 | 零基础用通义灵码 AI 程序员开发个人笔记网站

通义灵码是一款基于通义大模型的智能编码辅助工具,支持自然语言生成代码、单元测试生成、代码注释生成等功能,兼容多种主流IDE和编程语言。对于零基础用户,只需通过自然语言描述需求,通义灵码即可自动生成代码,帮助快速开发个人笔记网站,极大简化开发流程,提升效率。作者…

harmony OS NEXT-通过用户首选项实现数据持久化

鸿蒙通过用户首选项实现数据持久化 1.1 场景介绍 用户首选项为应用提供Key-Value键值型的数据处理能力,支持应用持久化轻量级数据,并对其修改和查询。当用户希望有一个全局唯一存储的地方,可以采用用户首选项来进行存储。Preferences会将该数据缓存在内存中,当用户读取的时…

harmony OS NEXT-启动页开发

鸿蒙启动页开发 1.1 更改应用名称和图标 1.更改应用图标找到moudle.json5文件,找到应用启动的EntryAbility下面的icon,将原来的图标改成自己设置的即可2.更改应用名称3.效果展示2.1 广告页面开发3.1 详细介绍 3.1.1 启动页面 import { PrivacyDialog } from ../views/componen…

harmony OS NEXT–状态管理器–@State详解

鸿蒙Harmony--状态管理器--@State详解 1.1 定义 @State装饰的变量,或者称为状态变量,一旦变量拥有了状态属性,就可以触发其直接绑定UI组件的刷新。当状态改变时,UI会发生对应的渲染变化 ,@State装饰的变量,与声明式范式中的其他被装饰变量一样,是私有的,只能从组件内部访问。在…

harmony OS NEXTUI开发

UI开发 1. 布局概述 1.1 开发流程1.先确定开发流程 -> 2.分析页面元素构成 ->3.选用合适的布局容器组件1.3 布局元素组成:盒模型2.1 布局分类 2.1 线性布局线性布局是开发中最常用、最基础的布局,通过线性容器Row和Column构建2.1.1 线性布局子元素排列方向:主轴布局子…

harmony OS NEXT组件结构

组件结构 1. 认识基本的组件结构ArkTS通过装饰器@Component 和@Entry 装饰 struct 关键字声明的数据结构,构成一个自定义组件 自定义组件中提供了一个build函数,开发者需要在函数内以链式调用的方式进行基本的UI描述,UI描述的方法请参考UI描述规范srtuct-自定义组件基于stru…

如何使用 vxe-table 来实现高亮行与高亮列,单元格选择高亮移动功能

如何使用 vxe-table 来实现高亮行与高亮列,单元格选择高亮移动功能 查看官网:https://vxetable.cn gitbub:https://github.com/x-extends/vxe-table gitee:https://gitee.com/x-extends/vxe-table 效果代码 通过 rowConfig.isCurrent 启用高亮行功能,columnConfig.isCurre…

Browser-use探索-webui

UI化的Browser-use 拉项目下来:git clone https://github.com/browser-use/web-ui.git # 拉取项目依次安装依赖:# pip install browser-use# playwright install# pip install -r requirements.txt 重新搞个配置文件.env:OPENAI_ENDPOINT=https://api.openai.com/v1 OPENAI_…

Web 页面实现图片放大镜效果

Web 页面实现图片放大镜效果Web 页面实现图片放大镜效果 下面是一个完整的示例代码: <!DOCTYPE html> <html><head><meta charset="UTF-8" /><title>图片放大镜效果</title><style>.container {position: relative;width…

3.A+B 问题三

用while(hasNext())来判断是非还有输入 后面用if判断结束循环的条件 break 结束循环; continue 跳过本次循环 进入下一次循环