MMSet2
给定一棵n个节点的树,点编号为1…n。
Q次询问,每次询问给定一个点集S,令, f ( u ) = max v ∈ S d i s t ( u , v ) f(u)=\max_{v\in S}dist(u,v) f(u)=maxv∈Sdist(u,v)
你需要求出 min u = 1 … n f ( u ) \min_{u=1\dots n}f(u) minu=1…nf(u)
其中dist(u,v)表示树上路径(u,v)的边数。
输入描述:
第一行一个整数n,接下来n−1行每行两个整数表示树上的一条边。
接下来一行一个整数Q,接着Q行,每行第一个数是|S|,剩下|S|个互不相同的数代表这个集合。
输出描述:
输出Q行,每行一个整数表示答案。
示例1
输入
3
1 2
1 3
1
2 2 3
输出
1
备注:
n≤3×105,|S|≥1,∑|S|≤106
每条边的长度是1,显然答案ans就是S的若干条直径中两条半径差值最小时较大的那条半径,因为如果有u’点到S的其他点的距离均小于刚刚的答案,那么直径就可以减小了,当然,这样的半径也能成为f(u),因为如果f(u)能扩大,则直径就能增大了。
由于边权均为1,假设两半径为 r i , r 2 r_i,r_2 ri,r2且 r 1 > r 2 r_1>r_2