编程题
### 问题描述 大衣有一棵有 $N$ 个节点的树,节点 $1$ 为根节点。每个节点有一个二进制值($0$ 或 $1$),最初所有节点的二进制值都为 $0$。 定义点集的**与值**为:对于点集中的所有节点,它们的二进制值按位与得到的值。 对于树上的一条边,将其移除后得到的两棵树,如果它们各自的所有节点的与值相等,则称这条边是**好的**。 大衣可以进行 $Q$ 次询问,每次询问有如下形式: - $1\space\space u​$:如果节点 $u​$ 是叶子节点,将其二进制值变为 $1​$,否则,将其二进制值变为其后代节点的与值。 - $2$:请找出此时树上好的边的数量。 注意:节点 $X​$ 的后代节点为它子树上除了 $X​$ 以外的所有节点。 ### 输入格式 第一行输入一个正整数 $N$ 表示树上节点的个数。 接下来 $N-1$ 行每行输入一条边,第 $i$ 条边连接的两个节点为 $u_i,v_i$。 下一行输入一个正整数 $Q$ 表示询问的数量。 接下来 $Q​$ 行每行输入一组询问,如题所述。 ### 输出格式 对于每次询问 $2​$,输出此时树上好的边的数量,并换行。 ### 样例输入 ```text 5 1 2 1 3 2 4 2 5 5 1 1 1 3 2 1 5 2 ``` ### 样例输出 ```text 3 2 ``` ### 说明 询问 $1$:节点 $1$ 不是叶子节点,因此将其二进制值变为其后代节点的与值。节点 $1$ 的后代为 `{2,3,4,5}`,因为所有节点的二进制值都为 $0$,所以它们的与值也为 $0$,故将节点 $1$ 的二进制值变为 $0$。 询问 $2​$:因为节点 $3​$ 是叶子节点,所以将节点 $3​$ 的二进制值变为 $1​$。 询问 $3​$:连接节点 $(1,2),(2,4),(2,5)​$ 的边都是好的: - 边 $(1,2)$:将其移除后得到的两棵树包含的节点分别为 `{1,3}` 和 `{2,4,5}`。它们各自的所有节点的与值分别是 $0\And1=0$ 和 $0\And0\And0=0$,它们是相等的。 - 边 $(2,4)$:将其移除后得到的两棵树包含的节点分别为 `{4}` 和 `{1,2,3,5}`。它们各自的所有节点的与值分别是 $0$ 和 $0\And0\And1\And0=0$,它们是相等的。 - 边 $(2,5)$:将其移除后得到的两棵树包含的节点分别为 `{5}` 和 `{1,2,3,4}`。它们各自的所有节点的与值分别是 $0$ 和 $0\And0\And1\And0=0$,它们是相等的。 询问 $4$:因为节点 $5$ 是叶子节点,所以将节点 $5$ 的二进制值变为 $1​$。 询问 $5$:连接节点 $(1,2),(2,4)​$ 的边都是好的. ### 评测数据规模 对于所有的评测数据,$1\le N,Q\le 10^5$,$1\le u_i,v_i\le N$ 且 $u_i\ne v_i$。
查看答案
赣ICP备20007335号-2