P15831 [JOI Open 2015] 选举活动 / Election Campaign

题目描述

在 JOI 共和国中,有 $N$ 座城市,编号从 1 到 $N$。这些城市由 $N-1$ 条道路连接。JOI 共和国的人民使用这些道路在城市间旅行。每条道路均可双向通行。通过一条或多条道路,人们可以在任意两座城市之间往来。 IOI 先生是 JOI 共和国总统的候选人。当然,为了成为总统,他必须进行总统竞选活动。他的秘书为他制定了 $M$ 个竞选计划。在第 $i$ 个计划中,IOI 先生将从城市 $A_i$ 出发,沿着最短路径(即经过最少道路)前往城市 $B_i$,并在沿途的每一座城市(包括城市 $A_i$ 和城市 $B_i$)发表公开演讲。由于他的秘书非常出色,已知如果执行第 $i$ 个计划,IOI 先生将获得 $C_i$ 张选票。多个计划可以同时执行。 然而,JOI 共和国的人民没有耐心。如果 IOI 先生在同一座城市发表演讲超过一次,他将失去 JOI 共和国人民的支持。 由于 IOI 先生想成为总统,他希望获得尽可能多的选票。你是 JOI 共和国的超级程序员,因此他请你编写一个程序,在假设他不会在同一座城市发表演讲超过一次的前提下,计算他在总统选举中能获得的最大选票数。 ### 任务 给定 JOI 共和国的城市数量 $N$、道路信息、竞选计划的数量 $M$ 以及每个计划的信息,编写一个程序计算 IOI 先生在总统选举中能获得的最大选票数。

输入格式

从标准输入读取以下数据。 - 输入的第一行包含一个整数 $N$,表示 JOI 共和国的城市数量。 - 接下来的 $N-1$ 行中,第 $i$ 行($1 \leq i \leq N-1$)包含两个以空格分隔的整数 $X_i, Y_i$。这表示第 $i$ 条道路连接城市 $X_i$ 和城市 $Y_i$。 - 接下来的一行包含一个整数 $M$,表示竞选计划的数量。 - 接下来的 $M$ 行中,第 $i$ 行($1 \leq i \leq M$)包含三个以空格分隔的整数 $A_i, B_i, C_i$。这表示在第 $i$ 个计划中,IOI 先生将从城市 $A_i$ 沿着最短路径前往城市 $B_i$,如果执行该计划,他将获得 $C_i$ 张选票。

输出格式

输出应包含一行,其中包含一个整数,表示 IOI 先生在总统选举中能获得的最大选票数。

说明/提示

### 样例 1 解释 在此样例输入中,最优策略是执行计划 1 和计划 3。 ### 样例 2 解释 此样例输入满足子任务 3 的约束条件。 ### 样例 3 解释 此样例输入满足子任务 4 的约束条件。 ### 约束条件 所有输入数据满足以下条件。 - $2 \leq N \leq 100\,000$。 - $1 \leq X_i \leq N$。 - $1 \leq Y_i \leq N$。 - $X_i \ne Y_i$($1 \leq i \leq N-1$)。 - 人们可以通过一条或多条道路在任意两座城市之间往来。 - $1 \leq M \leq 100\,000$。 - $1 \leq A_i \leq N$。 - $1 \leq B_i \leq N$。 - $A_i \ne B_i$($1 \leq i \leq M$)。 - $1 \leq C_i \leq 10\,000$。 ### 子任务 #### 子任务 1 [10 分] - $M \leq 15$。 #### 子任务 2 [5 分] - $X_i = i$($1 \leq i \leq N-1$)。 - $Y_i = i+1$($1 \leq i \leq N-1$)。 - $C_i = 1$($1 \leq i \leq M$)。 #### 子任务 3 [5 分] - $X_i = i$($1 \leq i \leq N-1$)。 - $Y_i = i+1$($1 \leq i \leq N-1$)。 #### 子任务 4 [30 分] - $C_i = 1$($1 \leq i \leq M$)。 #### 子任务 5 [10 分] - $N \leq 1\,000$。 - $M \leq 1\,000$。 #### 子任务 6 [40 分] - 无额外约束。 翻译由 DeepSeek V3.2 完成