P11885 [RMI 2024] 跑酷 / Jump Civilization
题目描述
有 $n$ 个岛,编号 $1\sim n$。给定长度为 $(n-1)$ 的正整数数列 $v_1,v_2,\ldots,v_{n-1}$。
当你在岛 $i$($1\le i\lt n$)上时,可以跳到岛 $(i+1)$ 上或者岛 $v_i$ 上。这里,$i\lt v_i$。
给定正整数 $k$。对于岛 $i$,定义 $f(i,k)$ 表示从它出发跳**至多** $k$ 步能够跳到的岛有多少个(包括自身)。
此外,$v_i$ 还满足**特殊性质**:**对于任意 $1\le i\lt j\lt n$,要么 $v_i\le j$,要么 $v_j\le v_i$。**
对于 $i=1,2,\ldots,n$,求出 $f(i,k)$。
补充说明:即使岛 $i$ 有多种在 $k$ 步内跳到岛 $j$ 的方式,岛 $j$ 也只算一次。
输入格式
第一行,两个正整数 $n,k$。
第二行,$(n-1)$ 个正整数 $v_1,v_2,\ldots,v_{n-1}$。
输出格式
输出一行 $n$ 个正整数,第 $i$ 个数表示 $f(i,k)$。
说明/提示
### 样例解释
- 样例 $1$ 解释:以岛 $1$ 为例,跳 $0$ 步可以到达岛 $1$,跳 $1$ 步可以到达岛 $\{2,4\}$。所以 $f(1,1)=3$。
### 数据范围
对于 $100\%$ 的数据,保证:
- $1\le n\le 3\times 10^5$;
- $1\le k\lt n$;
- $i\lt v_i\le n$;
- **对于任意 $1\le i\lt j\lt n$,要么 $v_i\le j$,要么 $v_j\le v_i$。**
---
| 子任务 | $n\le$ | 特殊性质 | 得分 |
| :-: | :-: | :-: | :-: |
| $1$ | $2\, 000$ | | $6$ |
| $2$ | $10^5$ | $\text{A}$ | $27$ |
| $3$ | $3\times 10^5$ | $\text{B}$ | $11$ |
| $4$ | $10^5$ | | $37$ |
| $5$ | $3\times 10^5$ | | $19$ |
- 特殊性质 $\text{A}$:$k\le 50$。
- 特殊性质 $\text{B}$:$v_i\le i+2$。