AT_utpc2025_b.Binary Tree Counting
NOI/NOI+/CTSC
通过率:0%
AC君温馨提醒
该题目为【atcoder】题库的题目,您提交的代码将被提交至atcoder进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
有 N 个顶点,编号为 1,2,…,N,请你求满足以下所有条件的二叉树的个数,并将答案对 998244353 取模:
- 对于每个 i=1,2,…,N,顶点 i 的先序遍历编号为 i。特别地,顶点 1 是根节点。
- 对于每个 i=1,2,…,M,顶点 Ai 的中序遍历编号为 Bi。
这里,当存在某个顶点 v 满足以下任一条件时,认为两棵二叉树不同:
- v 的左儿子是否存在或其顶点编号不同。
- v 的右儿子是否存在或其顶点编号不同。
二叉树定义如下:每个顶点至多有一个左儿子和至多有一个右儿子的有根树。
关于先序遍历和中序遍历,定义如下。对于任一顶点 v,其在先序、中序遍历中的编号分别在以下伪代码中 dfs(根) 执行时得到 preorder[v] 与 inorder[v] 的值:
pre_cnt = 1; in_cnt = 1
def dfs(v):
preorder[v] = pre_cnt; pre_cnt += 1
if v 的左儿子存在:
dfs(v 的左儿子)
inorder[v] = in_cnt; in_cnt += 1
if v 的右儿子存在:
dfs(v 的右儿子)
输入格式
输入格式如下,通过标准输入读入:
N M A1 B1 A2 B2 ⋮ AM BM
输出格式
输出一行,表示满足条件的二叉树个数对 998244353 取模的结果。
输入输出样例
输入#1
3 1 2 1
输出#1
2
输入#2
5 3 1 3 2 5 4 2
输出#2
0
输入#3
30 6 12 26 9 5 15 14 19 15 4 2 10 4
输出#3
550222816
说明/提示
样例解释 1
有以下两棵满足条件的二叉树:
- 顶点 1 为根,顶点 2 是顶点 1 的左儿子,顶点 3 是顶点 2 的右儿子。对此二叉树,
- 顶点 1 的先序编号是 1,中序编号是 3。
- 顶点 2 的先序编号是 2,中序编号是 1。
- 顶点 3 的先序编号是 3,中序编号是 2。
- 顶点 1 为根,顶点 2 是顶点 1 的左儿子,顶点 3 是顶点 1 的右儿子。对此二叉树,
- 顶点 1 的先序编号是 1,中序编号是 2。
- 顶点 2 的先序编号是 2,中序编号是 1。
- 顶点 3 的先序编号是 3,中序编号是 3。
样例解释 2
不存在符合条件的二叉树。
数据范围
- 输入均为整数。
- 1≤M≤N≤500
- 1≤Ai,Bi≤N
- Ai=Aj (i=j)
- Bi=Bj (i=j)
由 ChatGPT 5 翻译
输入解题思路,AI测评打分。不知道怎么写?