CF1491E Fib-tree
题目描述
设 $F_k$ 表示斐波那契数列的第 $k$ 项,定义如下:
- $F_0 = F_1 = 1$;
- 对于任意整数 $n \geq 0$,有 $F_{n+2} = F_{n+1} + F_n$。
给定一棵有 $n$ 个顶点的树。树是一个无环连通无向图。
我们称一棵树为 Fib-tree,当且仅当它的顶点数等于某个 $F_k$,并且至少满足以下条件之一:
- 这棵树只包含 $1$ 个顶点;
- 可以通过删除某条边,将其分成两棵 Fib-tree。
判断给定的树是否为 Fib-tree。
输入格式
输入的第一行包含一个整数 $n$($1 \leq n \leq 2 \cdot 10^5$),表示树的顶点数。
接下来 $n-1$ 行,每行包含两个整数 $u$ 和 $v$($1 \leq u, v \leq n$,$u \neq v$),表示树中的一条边。保证给定的边构成一棵树。
输出格式
如果给定的树是 Fib-tree,输出 "YES";否则输出 "NO"。
你可以以任意大小写输出答案。例如,如果答案是 "YES",则输出 "Yes" 或 "yeS" 也会被认为是正确答案。
说明/提示
在第一个样例中,可以切断边 $(1, 2)$,树会被分成大小分别为 $1$ 和 $2$ 的两棵树。任意大小为 $2$ 的树都是 Fib-tree,因为它可以被分成两个大小为 $1$ 的树。
在第二个样例中,无论切断哪条边,树都会被分成大小为 $1$ 和 $4$ 的两棵树。由于 $4$ 不是任何 $F_k$,因此它不是 Fib-tree。
在第三个样例中,存在一种切边顺序,使得过程中所有的树都是 Fib-tree,例如:$(1, 3), (1, 2), (4, 5), (3, 4)$。
由 ChatGPT 4.1 翻译