3967: 计数(count)

时间限制: 1 Sec 内存限制: 512 MB
提交: 40 解决: 18
[提交][状态][博客][加入收藏]
题目描述
既然是萌萌哒 visit_world 的比赛,那必然会有一道计数题啦!
考虑一个 N个节点的二叉树,它的节点被标上了 1∼N 的编号. 并且,编号为 i的节点在二叉树的前序遍历中恰好是第i个出现.
我们定义Ai 表示编号为i的点在二叉树的中序遍历中出现的位置.
现在,给出M个限制条件,第i个限制条件给出了ui,vi,表示Aui<Avi ,也即中序遍历中ui在vi之前出现.
你需要计算有多少种不同的带标号二叉树满足上述全部限制条件,答案对109+7 取模.

输入
第一行一个整数 T(1≤T≤5), 表示数据组数.
每组数据第一行为两个整数 N,M,意义如题目所述.
接下来 M 行,每行两个整数ui,vi(1≤ui,vi≤N) . 描述一条限制.

输出
对每组数据,输出一行一个整数,表示答案.
样例输入
3
5 0
3 2
1 2
2 3
3 3
1 2
2 3
3 1
样例输出
1
提示
解释
第一组数据,无任何限制时,5 个点的二叉树形态个数为 4242 .
第二组数据,唯一满足条件的二叉树的形态为 1 - 2 - 3.(1 为根,2, 3 均为右儿子).
第三组数据,限制条件产生矛盾.
样例 2
见下发文件.
数据范围和子任务
对于全部的测试数据,保证 T≤5,N≤400,M≤103T≤5,N≤400,M≤103 .
子任务 1(20 分):M=0M=0 .
子任务 2(15 分):N≤10N≤10 .
子任务 3(20 分):N≤50,M≤1N≤50,M≤1 .
子任务 4(15 分):N≤50N≤50 .
子任务 5(30 分):无特殊限制.

来源
hnsdfz国庆集训day2

题解

我们要解决的是前序为1-n的所有节点构成树的形态数,那么前序为1的必然是根节点,枚举i,2-i的是左子树,i+1到n的是右子树,累计左右子树答案之积的和,看出这是一个递归的过程,且对于每一个任务,我们关心的只有左右端点,故考虑DP,转移显然,但还要考虑条件限制:右子树及根不能对左子树有限制,且右子树不能对根有限制,而他们的编号又是一段连续区间,而限制又是一个二维问题,故用矩阵前缀和处理即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值