[GESP202412 八级] 排队

GESP编程共123题,本题是整站第1457题,已经有人完成了本题,加油!

题目描述

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

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

输入格式

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

接下来 m 行,每行两个整数 ai​,bi​,表示一对关系。

输出格式

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

输入输出样例

输入 #1

4 2
1 3
2 4

输出 #1

2

输入 #2

3 0

输出 #2

6

输入 #3

3 2
1 2
2 1

输出 #3

0

说明/提示

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

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

对于所有测试数据点,保证 1≤n≤2×10^5,0≤m≤2×10^5。

别灰心,再试一次!

真题解析

【题目大意】n位同学排成一行队伍,其中存在这样的约束,给出关系(ai,bi),表示排队时编号为i的同学需要排在编号为j 的同学前面,并且两人在队伍中相邻,这样的关系一共给m对,m>=0。求解有多少种排队方式。

【考纲知识点】排列组合、搜索

【解题思路】如果所有同学之间都没有关系,则排队方式为全排列:n!。现在同学之间有m对关系,前后关系有要求且必须相邻,可将有关系的同学先进行聚集,然后看聚集后有多少堆,则堆数的全排列即是排队方式的数量,且本题有拓扑偏序关系,不能出现环的情况,否则无解,判断是否存在环可以用搜索+标记判断。

参考程序

本站题目仅供学习,GESP版权归CCF所有,如有侵权请联系删除。站长陈老师QQ及微信:208234。