P7331 Dream and the Multiverse REMATCH
题目背景
[Link](https://youtu.be/tylNqtyj0gs?t=2388)
*I have gone over the scenarios in my head,*
*and there are 6.96969 billion outcomes, and only one of them -*
*- do I win.*
题目描述
Dream 将时空的结构抽象为一个有 $N$ 个节点(编号为 $1$ 到 $N$)的有向根树(树形结构)。节点 $1$ 是根节点,对于每个 $i$($1 \le i \le N-1$),节点 $i+1$ 的父节点是 $f_i$。这棵树的所有边都是从根节点指向外部的。
然后,Dream 使用一种神奇的超能力,向这棵树中添加了 $M$ 条有向边,使得结果图仍然是无环的(有向无环图,DAG)。
我们称这个 DAG 的一个节点为一个*事件*,并进一步称这个 DAG 上的一条简单路径为一个*时代*。Dream 认为一对事件 $(i,j)$ 是*可能的*,如果存在一个时代,其第一个事件是 $i$,最后一个事件是 $j$。注意,对于一个可能的对,$i < j$ 并不一定成立。
Dream 现在希望你回答 $Q$ 个查询。在每个查询中,他给你两个正整数 $l$ 和 $r$,其中 $l \leq r$,他希望知道有多少对可能的事件 $(i,j)$ 满足 $l \leq i < j \leq r$。
输入格式
输入的第一行包含两个空格分隔的整数 $N$ 和 $M$。
第二行包含 $N-1$ 个空格分隔的整数 $f_1, f_2, \ldots, f_{N-1}$。
接下来的 $M$ 行中,每行包含两个空格分隔的整数 $u$ 和 $v$,描述了一条从节点 $u$ 到节点 $v$ 的额外边。
接下来的行包含一个整数 $Q$。
接下来的 $Q$ 行中,每行包含两个空格分隔的整数 $l$ 和 $r$,描述了一个查询。
输出格式
对于每个查询,输出一行,包含一个整数——满足 $l \leq i < j \leq r$ 的可能事件对 $(i,j)$ 的数量。
说明/提示
- $2 \leq N \leq 7 \cdot 10^5$
- $1 \leq Q \leq 7 \cdot 10^5$
- $0 \leq M \leq 20$
- 对于每个有效的 $i$,$1 \le f_i \le N$
- $1 \le u, v \le N$
- 输入描述的图是无环的
- $1 \le l \le r \le N$
### 子任务
**子任务 #1 (17 分):** $N,Q \le 3 \cdot 10^5$
**子任务 #2 (83 分):** 原始约束条件。
题面翻译由 ChatGPT-4o 提供。