BSOJ 2927 -- 【模拟试题】保镖排队

这篇博客讨论了一道模拟试题,涉及到保镖排队的问题。题目要求保镖按照上司在前,下属在后的规则排列,并且下属按武功实力从高到低排序。将问题转化为二叉树的拓扑排序,博主推导了方案数的计算公式,并指出在一定条件下该问题是可解的。
摘要由CSDN通过智能技术生成

Description
【问题背景】
  教主LHX作为知名人物,时刻会有恐怖分子威胁他的生命。于是教主雇佣了一些保镖来保障他的人生安全。
【问题描述】
  教主一共雇佣了N个保镖,编号为1~N。每个保镖虽然身手敏捷武功高强,但是他在其余N-1个保镖里,都会有一个“上司”,他会对他的上司言听计从。但一号保镖例外,他武功盖世,不惧怕其余任何保镖,所以他没有上司。
  教主LHX会对这N个保镖进行定期视察。每次视察的时候,首先会让所有保镖排队。
对于每个保镖,在他心目中会对他的所有下属的武功实力排个队。
  现在教主要求排出来的队伍满足:①互为上司-下属的两个保镖,上司在前,下属在后 ②对于一个保镖的所有下属,武功实力较强的在前,较弱的在后。
  教主想知道,总的排队方法数除以10007的余数是多少。
Input
  输入的第一行为一个正整数T,表示了数据组数。
  对于每组数据:
  第一行为一个正整数N。
  接下来N行,每行描述一个保镖。
  第i+1行,会有一个整数K,代表第i个保镖的下属个数,接下来K个数,代表第i个保镖的下属按照武功实力从高到低的编号。
Output
  输出包括C行,每行对于每组数据输出方案数mod 10007后的结果。
Sample Input
2
5
2 2 3
2 4 5
0
0
0
7
2 2 3
2 4 5
2 6 7
0
0
0
0
Sample Output
3
10
Hint
【样例解释】
  对于第1组数据,有以下3种排列是合法的:
  1 2 4 3 5
  1 2 3 4 5
  1 2 4 5 3
  同时满足了1在2与3之前且2在3之前,2在4与5之前且4在5之前
【数据范围】
  对于20%的数据,有N ≤ 9;
  对于40%的数据,有对于所有K,有K ≤ 2;
  对于60%的数据,有N ≤ 100;
  对于100%的数据,有T ≤ 10,N ≤ 1000,K ≤ N。

看着是一棵多叉树,可是根据题意描述,按照排列顺序,可以发现恰好是儿子兄弟的二叉树表示法
(其实就是一个先决条件,就是必须把父亲排在前面)
然后转化成二叉树,拓扑方案数?因为这是在二叉树上,所以是可做的(如果是有向无环图,这个问题就是NP问题了,只能通过状压解决小规模数据)。
下面是推导过程:
f[i] 是i号子树的拓扑排序方案数。
lr 分别是它的左右儿子。
根据乘法原理
f[i]=f[l]f[r]g(l,r)
其中 g(l,r) 表示左右儿子拓扑序列合并的方案数
s[i] 表示以i为根的子树中的节点数。
l 的拓扑序列长度为

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值