luogu#P11624. [迷宫寻路 Round 3] 挂掉的模板

[迷宫寻路 Round 3] 挂掉的模板

题目背景

请仔细阅读题目中关于根的说明,根节点不一定是 1 号点!

某人把 LCA 板子写挂了,然后就有了这道题。

题目描述

有一颗 nn 个节点的有根树。

定义 FakeLCA 函数代码如下:

int FakeLCA(int u, int v) {
	while (u != v) u = fa[u], v = fa[v];
	return u;
}

其中 fa[i] 表示节点 ii 的父节点,特别的,根的父节点是根本身。

现在给定节点数 nn 和每个节点的父节点,问有多少个有序数对 (u,v)(u,v),满足 1u,vn1\le u,v\le nFakeLCA(u, v) 的结果是 uuvv 的真正的最近公共祖先。

输入格式

第一行一个整数 nn

第二行 nn 个整数,第 ii 个整数表示节点 ii 的父节点。

输出格式

一行一个数表示答案。

1
1
1
5
1 1 1 2 2
21
10
1 1 1 2 2 3 3 3 4 4
78
20
1 1 2 2 2 2 2 4 4 4 4 3 3 3 4 4 7 7 9 10
190
50
1 1 1 1 1 1 1 1 1 2 2 3 4 3 3 4 5 7 2 4 4 3 2 4 6 9 3 8 7 6 12 13 2 12 5 28 17 27 20 36 5 3 2 8 7 6 5 47 26 1
2336

提示

本题采用捆绑测试。

对于所有数据,1n1061\le n\le 10^6

子任务编号 nn\leq 分数
00 100100 2525
11 10001000
22 70007000
33 10610^6