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。