Type: RemoteJudge 1000ms 256MiB

[NOIP2018 普及组] 对称二叉树

You cannot submit for this problem because the contest is ended. You can click "Open in Problem Set" to view this problem in normal mode.

题目背景

NOIP2018 普及组 T4

题目描述

一棵有点权的有根树如果满足以下条件,则被轩轩称为对称二叉树:

  1. 二叉树;
  2. 将这棵树所有节点的左右子树交换,新树和原树对应位置的结构相同且点权相等。

下图中节点内的数字为权值,节点外的 idid 表示节点编号。

现在给出一棵二叉树,希望你找出它的一棵子树,该子树为对称二叉树,且节点数最多。请输出这棵子树的节点数。

注意:只有树根的树也是对称二叉树。本题中约定,以节点 TT 为子树根的一棵“子 树”指的是:节点TT 和它的全部后代节点构成的二叉树。

输入格式

第一行一个正整数 nn,表示给定的树的节点的数目,规定节点编号 1n1 \sim n,其中节点 11 是树根。

第二行 nn 个正整数,用一个空格分隔,第 ii 个正整数 viv_i 代表节点 ii 的权值。

接下来 nn 行,每行两个正整数 li,ril_i, r_i,分别表示节点 ii 的左右孩子的编号。如果不存在左 / 右孩子,则以 1-1 表示。两个数之间用一个空格隔开。

输出格式

输出文件共一行,包含一个整数,表示给定的树的最大对称二叉子树的节点数。

2 
1 3 
2 -1 
-1 -1 

1
10 
2 2 5 5 5 5 4 4 2 3 
9 10 
-1 -1 
-1 -1 
-1 -1 
-1 -1 
-1 2 
3 4 
5 6 
-1 -1 
7 8
3

提示

样例 1 解释


最大的对称二叉子树为以节点 22 为树根的子树,节点数为 11

样例 2 解释

最大的对称二叉子树为以节点 77 为树根的子树,节点数为 33

数据规模与约定

2525 个测试点。

vi1000v_i ≤ 1000

  • 测试点 13,n101 \sim 3, n ≤ 10,保证根结点的左子树的所有节点都没有右孩子,根结点的右 子树的所有节点都没有左孩子。
  • 测试点 48,n104 \sim 8, n ≤ 10
  • 测试点 912,n1059 \sim 12, n ≤ 10^5,保证输入是一棵“满二叉树” 。
  • 测试点 1316,n10513 \sim 16, n ≤ 10^5,保证输入是一棵“完全二叉树”。
  • 测试点 1720,n10517 \sim 20, n ≤ 10^5,保证输入的树的点权均为 11
  • 测试点 2125,n10621 \sim 25, n ≤ 10^6

本题约定:

层次:节点的层次从根开始定义起,根为第一层,根的孩子为第二层。树中任一节 点的层次等于其父亲节点的层次加 11

树的深度:树中节点的最大层次称为树的深度。

满二叉树:设二叉树的深度为 hh,且二叉树有 2h12^h-1 个节点,这就是满二叉树。

完全二叉树:设二叉树的深度为 hh,除第 hh 层外,其它各层的结点数都达到最大 个数,第 hh 层所有的结点都连续集中在最左边,这就是完全二叉树。

C23 CSP-J真题训练5数据结构(7月18日前完成)

Not Claimed
Status
Done
Problem
17
Open Since
2024-7-5 0:00
Deadline
2024-10-27 23:59
Extension
24 hour(s)