CF466E Information Graph

题目描述

在某公司中有 $n$ 名员工(编号为 $1$ 至 $n$),开始时员工之间没有任何关系,在接下来的 $m$ 天会发生以下事: 1. $y$ 成为了 $x$ 的上司($x$ 在那之前不会有上司)。 2. 员工 $x$ 得到了一份文件,然后 $x$ 把文件传给了他的上司,然后上司又传给了他的上司,以此类推,直到某人没有上司,将文件销毁。 3. 询问员工 $x$ 是否看过某份文件。

输入格式

第一行包含两个整数 $n$ 和 $m$($1 \le n,m \le 10^5$)——员工的数量和事件的数量。 接下来的 $m$ 行,每行描述一个事件(事件按**时间先后顺序**给出)。每行的第一个数字表示事件的类型 $t$($1 \le t \le 3$)。 - 若 $t=1$,则接下来会有两个整数 $x$ 和 $y$($1 \le x,y \le n$)——公司员工的编号。保证此时员工 $x$ 目前没有上司。 - 若 $t=2$,则接下来会有一个整数 $x$($1 \le x \le n$)——获得文件的员工编号。 - 若 $t=3$,则接下来会有两个整数 $x$ 和 $i$($1 \le x \le n$;$1 \le i \le$ 已发放的文件数量)——需要查询的员工和文件编号。文件按时间顺序从 $1$ 开始编号。 保证输入中至少包含一个第三种类型的查询。

输出格式

对于每一个操作 $3$,如果这个员工阅读过这份文件则输出 `YES`,否则输出 `NO`,然后换行。