P17145 [NOI 2026] 彩虹树
题目背景
题面、样例附件来自 [QOJ](https://qoj.ac/contest/3939/problem/18988)。
提交到洛谷上时,无需引用头文件 `#include "rainbow.h"`。直接将
```cpp
int rainbow(int c, int n, std::vector f);
```
复制到程序开头,同时选用 C++17 或者更高版本编译器编译。
题目描述
传说在夜之国中,有一棵包含 $n$ 个结点的彩虹树。彩虹树是一棵有根树,结点编号为 $0\sim n-1$,其中结点 $0$ 是彩虹树的树根,结点 $i$($1\le i
输入格式
### 【实现细节】
选手不需要,也不应该实现 `main` 函数。
选手需要确保提交的程序源文件包含头文件 `rainbow.h`,即在程序开头加入以下代码:
```cpp
#include "rainbow.h"
```
选手需要在提交的程序源文件 `rainbow.cpp` 中实现以下函数:
```cpp
int rainbow(int c, int n, std::vector f);
```
- $c,n$ 分别表示测试点编号与彩虹树的结点数。$c=0$ 表示该测试点为样例。
- $f$ 是一个长度为 $n$ 的序列,其中 $f_0=0$,$f_i$($1\le i
输出格式
### 【测试程序方式】
选手可以在本题目录下使用如下命令编译得到可执行文件:
```bash
g++ grader.cpp rainbow.cpp -o rainbow -O2 -std=c++14 -static
```
对于编译得到的可执行文件 `rainbow`:
- 可执行文件将从标准输入读入以下格式的数据:
- 第一行包含两个非负整数 $c,n$。
- 第二行包含 $n-1$ 个非负整数 $f_1,f_2,\ldots,f_{n-1}$。
- 可执行文件将输出以下格式的数据至标准输出:
- 输出一行一个非负整数,表示 `rainbow` 函数的返回值。
说明/提示
### 【样例 $1$ 解释】
- 满足规律 $S=\varnothing$ 的彩虹树的缤纷度共有 $[1,1,1]$、$[2,1,1]$、$[3,1,1]$ 三种。
- 满足规律 $S=\{1\}$ 的彩虹树的缤纷度共有 $[1,1,1]$、$[2,1,1]$ 两种。
- 满足规律 $S=\{2\}$ 的彩虹树的缤纷度共有 $[1,1,1]$、$[2,1,1]$ 两种。
- 满足规律 $S=\{1,2\}$ 的彩虹树的缤纷度有 $[1,1,1]$ 一种。
因此答案为 $3+2+2+1=8$。
### 【样例 $3$】
见选手目录下的 `rainbow/rainbow3.in` 与 `rainbow/rainbow3.ans`。
该样例满足测试点 $3,4$ 的约束条件。
### 【样例 $4$】
见选手目录下的 `rainbow/rainbow4.in` 与 `rainbow/rainbow4.ans`。
该样例满足测试点 $5\sim7$ 的约束条件。
### 【样例 $5$】
见选手目录下的 `rainbow/rainbow5.in` 与 `rainbow/rainbow5.ans`。
该样例满足测试点 $8,9$ 的约束条件。
### 【样例 $6$】
见选手目录下的 `rainbow/rainbow6.in` 与 `rainbow/rainbow6.ans`。
该样例满足测试点 $10\sim12$ 的约束条件。
### 【数据范围】
对于所有测试数据,均有:
- $1\le n\le200$;
- 对于所有 $1\le i