#P17056. [NWERC 2022] High-quality Tree

[NWERC 2022] High-quality Tree

背景

译自 Northwestern Europe Regional Contest (NWERC) 2022 Problem H。

原题许可协议为 CC BY-SA。

题目描述

二叉搜索树是计算机科学中最有用的数据结构之一。许多方法可以保持它们平衡,例如使用树旋转(如 AVL 树)或随机化(如 treap)。这些方法有一个共同点:它们都在一定程度上又慢又复杂。

但这一切马上就要改变了!计算机科学家 Rob 发明了一种保持有根二叉树平衡的新方法,它比目前最先进的方法好得多。核心思想是反复执行一种 Rob 称为 robbery 的操作。一次 robbery 就是从树中取走一个叶子并删除它。只要在合适的时机应用 robbery,Rob 就能够以 O(1)\mathcal{O}(1) 均摊时间保持树的平衡。

有人批评 Rob 的革命性发现,认为从树里删除元素会让算法不正确。Rob 并不同意这是个大问题;如果你计划存储 21052\cdot 10^5 个数,可能并不需要全部保留。但 Rob 接受了这一批评,并决定找到一种方法,使 robbery 的次数尽可能少。

:::align{center}

:::

图:样例输入 2 的示意图。删除红色标记的三个顶点(44551010)后,树会变成强平衡;这是使树强平衡所需删除的最少顶点数。

给定一棵包含 nn 个顶点的有根二叉树。顶点编号为 11nn,顶点 11 是根。你的任务是求出使这棵树变为强平衡所需的最少 robbery 次数。

强平衡的含义是:它的所有子树都是平衡的。一棵有根二叉树称为平衡,当且仅当它的左子树和右子树深度之差至多为 11。回忆一下,robbery 只是取走一个叶子并删除它,而这样做可能会让它的父节点变成叶子。

输入格式

输入包含:

  • 一行一个整数 nn1n21051 \leq n \leq 2\cdot 10^5),表示树的顶点数。
  • 接下来 n1n-1 行,每行两个整数 uuvv1u,vn1 \leq u,v \leq nuvu\neq v),表示顶点 uu 和顶点 vv 之间有一条边。

保证给定边构成一棵以顶点 11 为根的合法二叉树。不过,边可以以任意顺序出现,并且不是有向边:uu 可以是 vv 的父节点,也可以反过来。

输出格式

输出为了使树强平衡而需要删除的最少叶子数量。

6
1 2
1 3
3 4
3 5
5 6
1
12
1 2
2 3
3 4
3 5
1 6
6 7
7 8
7 9
9 10
6 11
11 12
3

提示

【数据规模与约定】

对于所有数据,满足 1n21051 \leq n \leq 2\cdot 10^5;输入边构成以 11 为根的合法二叉树;边无向给出且顺序任意。