P1003相聚gather

时间限制 1000 ms内存限制 512 MiB通过率 —
显示算法标签树 · LCA · 倍增

【题目描述】

Gioush 大队的营地错综复杂,最初,在 nn 个 Gioush 大队营地之间有若干条双向道路连接成一个整体,为了便于交通,暑假期间,Ehundategh 简化了交通系统。经过整改,Gioush 大队在假期期间的交通系统可以视为 nn 个节点组成的树,也就是说,他们只留下 n1n-1 条重要的双向主干道。

现在,有 qq 组 Gioush 大队成员想要相聚,每一组成员有 kk 人,散布在 Gioush 大队基地中的各个营地中,在假期期间,他们相约一起出去玩,但是还没有定好目的地,于是他们决定按照以下规则选定目的地:

  • 记每个人初始在 u1,u2,,uku_1,u_2,\cdots,u_k 这些营地,假定的目的地为 vv,记 d(ui,v)\text{d}(u_i,v)uiu_ivv 的简单路径的距离。
  • 他们希望他们花费时间的和最小,也就是 vv 是最小化 i=1kd(ui,v)\sum_{i=1}^k \text{d}(u_i,v) 的节点 vv

你需要告诉每一组成员,他们相聚的最小总时间为多少,也就是 min{i=1kd(ui,v)}\min\{\sum_{i=1}^k \text{d}(u_i,v)\}

【输入格式】

从文件 gather.in\textbf{\textit{gather.in}} 中读入数据。

第一行两个正整数 n,qn,q,表示营地数量和成员对数。

接下来 n1n-1 行,每行三个正整数 u,v,wu,v,w,表示一条长度为 ww 的连接 u,vu,v 两个营地双向道路。

接下来 qq 行,每行先给出一个正整数 kk,表示该组成员的人数,紧接着在同一行,kk 个用空格隔开的整数 u1,u2,,uku_1,u_2,\cdots,u_k,含义同题目描述。

【输出格式】

输出到文件 gather.out\textbf{\textit{gather.out}} 中。

qq 行,每行一个整数,表示每组成员最小总时间。

【样例 1 输入】

5 21 2 12 3 13 4 11 5 22 4 53 1 2 4

【样例 1 输出】

53

【说明/提示】

【样例 2】

见选手目录下的 gather/gather2.in\textbf{\textit{gather/gather2.in}}gather/gather2.ans\textbf{\textit{gather/gather2.ans}}

该组样例符合测试点 9129\sim 12 的数据范围。

【样例 3】

见选手目录下的 gather/gather3.in\textbf{\textit{gather/gather3.in}}gather/gather3.ans\textbf{\textit{gather/gather3.ans}}

该组样例符合测试点 132013\sim 20 的数据范围。

【数据范围】

测试点编号nnqqkk
141\sim 4100\leq 100100\leq 100=2=2
585\sim 8100\leq 100100\leq 1003\leq 3
9129\sim 12105\leq 10^5105\leq 10^5=2=2
132013\sim 20105\leq 10^5105\leq 10^53\leq 3

对于 100%100\% 的数据,保证:1wi1031\leq w_i\leq 10^32k32\leq k\leq3

【题解】

已公开 1 篇题解,官方题解会优先显示。

查看题解