#P8204. [Ynoi2005] tdnmo

    ID: 9300 远端评测题 2000ms 512MiB 尝试: 0 已通过: 0 显示难度省选/NOI− 上传者: 标签>2005Special JudgeO2优化Ynoi

[Ynoi2005] tdnmo

题目描述

给定一棵 nn 个顶点的有根树,顶点编号为 1,2,…,n1,2,\dots,n,11 号顶点为根。定义有向邻域 N(x,y)N(x,y) 为以 xx 为根的子树中,距离 xx 小于 yy 的顶点构成的集合,其中 1≤x≤n,  0≤y≤n1\le x\le n,\;0\le y\le n,x,yx,y 为整数。

给出 mm 个有向邻域 N(xi,yi)i=1mN(x_i,y_i)_{i=1}^m,你可以从 N(1,0)N(1,0) 出发,经过不超过 5m5m 次操作到达每个给出的有向邻域,可以使用的操作有:

  1. 从有向邻域 N(x,y)N(x,y) 移动到 N(x′,y′)N(x',y'),满足 N(x,y)⊆N(x′,y′)N(x,y)\subseteq N(x',y');
  2. 撤销一次 11 操作,即回到之前最后一次未撤销的 11 操作前的位置,并将这次 11 操作标为已撤销;
  3. 声明当前到达了有向邻域 N(xi,yi)N(x_i,y_i),满足当前所在邻域是 N(xi,yi)N(x_i,y_i);

其中操作 11 的代价为移动前后两个有向邻域的元素个数之差,操作 22 和 33 不计代价,要求操作 22 执行时必须存在未撤销的操作 11,操作 33 必须对每个 1≤i≤m1\le i\le m 恰好各执行一次。

你需要保证操作的总代价不超过 2.5×1092.5\times{10}^{9}。

输入格式

第一行两个整数 n mn\ m;

接下来一行,共 n−1n-1 个整数,依次表示编号为 2,3,…,n2,3,\dots,n 的顶点的父亲 f2,…,fnf_2,\dots,f_n,保证父亲的编号小于孩子的编号;

接下来的 mm 行中,第 ii 行两个整数 xi yix_i\ y_i,表示给出的每个有向邻域。

输出格式

第一行一个整数 m′m',表示你进行的操作次数;

接下来 m′m' 行,依次表示每个操作;

操作 11 表示为 1 x′ y′1\ x'\ y';

操作 22 表示为 22;

操作 33 表示为 3 i3\ i。

8 4
1 1 1 2 2 2 5
2 1
1 1
6 0
1 2
16
1 2 1
3 1
2
1 6 0
3 3
2
1 1 1
1 1 1
3 2
2
1 1 2
1 1 2
3 4
2
2
2

提示

Idea:nzhtl1477,Solution:ccz181078,Code:ccz181078,Data:ccz181078,SPJ:nalemy

对于 100%100\% 的数据,满足 1≤n,m≤1061\le n,m\le 10^6,1≤fi≤i−11\le f_i\le i-1,1≤xi≤n,  0≤yi≤n1\le x_i\le n,\;0\le y_i\le n,所有数值为整数。