#P12730. [KOI 2021 Round 2] 美食推荐

    ID: 12509 Type: RemoteJudge 2500ms 1024MiB Tried: 0 Accepted: 0 Difficulty: 6 Uploaded By: Tags>动态规划 DP倍增点分治2021KOI(韩国)

[KOI 2021 Round 2] 美食推荐

题目背景

试题来源:https://koi.or.kr/archives/。中文翻译做了少量本土化修改。

按照署名—非商业性使用—相同方式共享 4.0 协议国际版进行授权。

题目描述

KOI 国有 NN 个城市。每个城市编号从 1 到 NN

KOI 国的结构很特别,把城市看作图的顶点、道路看作无向边,则这个国家的结构可以表示为一个包含 NN 个顶点的。树是一个无环的连通图。

KOI 国共有 MM 家美食餐厅,每家餐厅编号从 1 到 MM。某些城市可能没有餐厅,也可能有两个以上的餐厅,请特别注意这一点。

ii 家餐厅(1iM1 \leq i \leq M)位于城市 cic_i,配送范围为距离不超过 did_i 的城市,且其客户偏好度为 gig_i

ii 家餐厅可以向从城市 cic_i 出发,经过至多 did_i 条道路所能到达的所有城市配送。即,第 ii 家餐厅的配送范围为:

Ri={jd(ci,j)di}R_i = \{ j \mid d(c_i, j) \leq d_i \}

其中,d(a,b)d(a, b) 表示从城市 aa 到城市 bb 之间的最短路径长度(即需要经过的最少道路数)。

你是一名外卖推荐平台的运营者。为了避免服务重叠,你希望从 MM 家餐厅中选出一个子集 SS,满足以下条件:

  • 对于任意城市 pp,它不能同时被 SS 中的两个或多个餐厅包含在其配送范围内。也就是说,对于 SS 中任意不同的两家餐厅 iijj,都有 RiRj=R_i \cap R_j = \emptyset

请从所有满足上述条件的子集 SS 中,选出客户偏好度总和最大的一个,并输出该最大值。

输入格式

第一行包含两个整数 NNMM,中间用一个空格分隔。

接下来的 N1N-1 行中,每行包含两个整数 aabb,表示城市 aa 和城市 bb 之间有一条道路相连。

接下来的 MM 行中,每行包含三个整数 cic_idid_igig_i,表示第 ii 家餐厅所在城市、配送距离上限与客户偏好度。

输出格式

输出一个整数,表示满足条件的餐厅集合中客户偏好度之和的最大值。

8 5
1 2
2 3
3 4
4 5
5 6
4 7
4 8
3 2 40
6 0 5
8 0 5
2 1 16
5 1 32
53

提示

约束条件

  • 所有输入数据均为整数。
  • 1N1051 \leq N \leq 10^5
  • 1M1051 \leq M \leq 10^5
  • 对于所有 ii1iM1 \leq i \leq M),满足 0diN10 \leq d_i \leq N - 11gi1091 \leq g_i \leq 10^9

子任务

  1. (9 分)对于 1iN11 \leq i \leq N - 1,城市 ii 与城市 i+1i+1 之间有一条道路相连。
  2. (11 分)N,M20N, M \leq 20
  3. (17 分)N,M2000N, M \leq 2\,000
  4. (10 分)N2000N \leq 2\,000
  5. (8 分)对于 2iN2 \leq i \leq N,城市 i/2\lfloor i/2 \rfloor 与城市 ii 之间有一条道路相连。
  6. (12 分)图中度数大于等于 3 的顶点最多只有一个。
  7. (33 分)无额外约束条件。