CF1904E Tree Queries

题目描述

不劳动者不得食。用自己的力量去获得想要的东西。但请相信,认真努力的人终将笑到最后……不过即便如此,我也不会给你礼物的。 ——Santa,《旋风管家!》 由于 Hayate 没有从 Santa 那里收到圣诞礼物,他只好来解决一棵树上的询问问题。 Hayate 有一棵包含 $n$ 个节点的树。 现在 Hayate 想让你回答 $q$ 个询问。每个询问包含一个节点 $x$ 和另外 $k$ 个节点 $a_1,a_2,\ldots,a_k$。这 $k+1$ 个节点保证互不相同。 对于每个询问,你需要在移除节点 $a_1,a_2,\ldots,a_k$ 以及所有与这些节点相连的边之后,找到从节点 $x^\dagger$ 出发的最长简单路径的长度。 $^\dagger$ 从节点 $x$ 出发、长度为 $k$ 的简单路径是指一组互不相同的节点 $x=u_0,u_1,\ldots,u_k$,且对于所有 $1 \leq i \leq k$,节点 $u_{i-1}$ 和 $u_i$ 之间存在一条边。

输入格式

第一行包含两个整数 $n$ 和 $q$($1 \leq n, q \leq 2 \cdot 10^5$)——树的节点数和询问数。 接下来的 $n-1$ 行,每行包含两个整数 $u$ 和 $v$($1 \leq u, v \leq n$,$u \ne v$),表示节点 $u$ 和节点 $v$ 之间有一条边。保证给定的边构成一棵树。 接下来的 $q$ 行描述每个询问。每行包含整数 $x$、$k$ 以及 $a_1,a_2,\ldots,a_k$($1 \leq x \leq n$,$0 \leq k < n$,$1 \leq a_i \leq n$)——起始节点、被移除的节点数以及被移除的节点。 保证对于每个询问,$x,a_1,a_2,\ldots,a_k$ 互不相同。 保证所有询问中 $k$ 的总和不超过 $2 \cdot 10^5$。

输出格式

对于每个询问,输出一个整数,表示该询问的答案。

说明/提示

在第一个样例中,树的结构如下: ![](https://cdn.luogu.com.cn/upload/vjudge_pic/CF1904E/c5f1379037fd66e966f2028dba5fe4bd6a86c16c.png) 在第一个询问中,没有节点被移除。从节点 $2$ 出发的最长简单路径为 $2 \to 1 \to 3 \to 4$,因此答案为 $3$。 在第三个询问中,节点 $1$ 和 $6$ 被移除,树的结构如下图。从节点 $2$ 出发的最长简单路径为 $2 \to 5$,因此答案为 $1$。 ![](https://cdn.luogu.com.cn/upload/vjudge_pic/CF1904E/a4bba31c35c424ba9748f1f5381325841a00f680.png) 由 ChatGPT 4.1 翻译