QOJ.ac

QOJ

Time Limit: 3 s Memory Limit: 512 MB Total points: 100

#1067. 通行费

Statistics

Happyland 可以被描述为一组 $N$ 个城镇(编号为 $1$ 到 $N$),最初由 $M$ 条双向道路(编号为 $1$ 到 $M$)连接。城镇 $1$ 是中心城镇。保证可以通过这些道路从城镇 $1$ 到达任何其他城镇。这些道路是收费道路。道路 $i$ 的使用者必须向道路所有者支付 $c_i$ 分的通行费。已知所有 $c_i$ 都是不同的。最近,新建成了 $K$ 条额外的道路,它们由亿万富翁 Mr. Greedy 拥有。Mr. Greedy 可以决定这些新道路的通行费(不一定不同),并且他必须在明天公布这些通行费。

两周后,Happyland 将举行一场盛大的嘉年华!大量的参与者将前往中心城镇并沿着道路游行。总共有 $p_j$ 名参与者将从城镇 $j$ 出发前往中心城镇。他们只会沿着一组选定的道路行驶,而选定的道路将在活动前一天公布。根据古老的传统,道路由 Happyland 最富有的人,即 Mr. Greedy 选择。受同一传统的约束,Mr. Greedy 必须选择一组道路,使得所选道路的通行费总和最小,同时允许任何人从城镇 $j$ 到达城镇 $1$(因此,所选道路构成一个“最小生成树”,其中通行费是相应边的权重)。如果存在多组这样的道路,只要通行费总和最小,Mr. Greedy 可以选择其中任何一组。

Mr. Greedy 非常清楚,他从 $K$ 条新道路中获得的收入不仅仅取决于通行费。道路的收入实际上是从沿该道路行驶的人那里收取的总费用。更准确地说,如果有 $p$ 个人沿着道路 $i$ 行驶,那么道路 $i$ 的收入就是乘积 $c_i p$。注意,Mr. Greedy 只能从新道路收取费用,因为他不拥有任何旧道路。

Mr. Greedy 有一个狡猾的计划。他计划通过操纵通行费和道路选择来最大化他在嘉年华期间的收入。他希望为新道路分配通行费(明天公布),并为嘉年华选择道路(嘉年华前一天公布),以最大化他从 $K$ 条新道路中获得的收入。注意,Mr. Greedy 仍然必须遵循选择通行费总和最小的道路集合的传统。

你是一名记者,想要揭露他的计划。为此,你必须首先编写一个程序来确定 Mr. Greedy 通过他的狡猾计划能获得多少收入。

输入格式

你的程序必须从标准输入读取数据。第一行包含三个空格分隔的整数 $N$、$M$ 和 $K$。接下来的 $M$ 行描述了最初的 $M$ 条道路。其中第 $i$ 行包含空格分隔的整数 $a_i$、$b_i$ 和 $c_i$,表示城镇 $a_i$ 和 $b_i$ 之间有一条通行费为 $c_i$ 的双向道路。接下来的 $K$ 行描述了新建的 $K$ 条额外道路。其中第 $i$ 行包含空格分隔的整数 $x_i$ 和 $y_i$,表示有一条连接城镇 $x_i$ 和 $y_i$ 的新道路。最后一行包含 $N$ 个空格分隔的整数,其中第 $j$ 个整数是 $p_j$,表示从城镇 $j$ 前往城镇 $1$ 的人数。

输入还满足以下约束条件:

  • $1 \le N \le 100000$。
  • $1 \le K \le 20$。
  • $1 \le M \le 300000$。
  • 对于每个 $i$ 和 $j$,$1 \le c_i, p_j \le 10^6$。
  • 如果 $i \neq i'$,则 $c_i \neq c_{i'}$。
  • 任意两个城镇之间最多只有一条道路(包括新建的道路)。

输出格式

你的程序必须向标准输出写入一个整数,即可以获得的最大总收入。

样例

样例输入 1

5 5 1
3 5 2
1 2 3
2 3 5
2 4 4
4 3 6
1 3
10 20 30 40 50

样例输出 1

400

说明

在此样例中,Mr. Greedy 应将新道路 $(1,3)$ 的通行费设置为 $5$ 分。有了这个通行费,他可以选择道路 $(3,5)$、$(1,2)$、$(2,4)$ 和 $(1,3)$ 以使通行费总和最小,即 $14$ 分。来自城镇 $3$ 的 $30$ 人和来自城镇 $5$ 的 $50$ 人将通过新道路前往城镇 $1$,因此他可以获得 $(30 + 50) \times 5 = 400$ 分的最佳收入。

另一方面,如果新道路 $(1,3)$ 的通行费设置为 $10$ 分。现在,受传统的约束,Mr. Greedy 必须选择 $(3,5)$、$(1,2)$、$(2,4)$ 和 $(2,3)$,因为这是唯一使通行费总和最小的集合。因此,在嘉年华期间,新道路 $(1,3)$ 将不会收取任何收入。

子任务

你的程序将在 $5$ 组实例上进行测试,如下所示:

  1. (16 分) $N \le 10, M \le 20$ 且 $K = 1$。
  2. (18 分) $N \le 30, M \le 50$ 且 $K \le 10$。
  3. (22 分) $N \le 1,000, M \le 5,000$ 且 $K \le 10$。
  4. (22 分) $N \le 100,000, M \le 300,000$ 且 $K \le 15$。
  5. (22 分) $N \le 100,000, M \le 300,000$ 且 $K \le 20$。

Figure 1. 城镇和道路示意图

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.