QOJ.ac

QOJ

حد الوقت: 2.5 s حد الذاكرة: 1024 MB مجموع النقاط: 100 قابلة للهجوم ✓

#18164. 蘑菇环

الإحصائيات

在野外,人们经常能看到蘑菇长成圈状、弧状或其他形状。虽然它们是自然生长的,但“蘑菇圈”尤其长期以来一直是神话和民间传说的题材。据说,当土地被龙尾烧焦时,它们就会从土地中生长出来。另一个神话称,女巫会在夜间围绕着它们跳舞。最近,传说中提到一些天才聚集在蘑菇圈旁,站在中心,构思出了六道关于收集蘑菇的程序设计竞赛题目。

在无尽原野上旅行之后,蜗牛 Stuart 现在居住在蜗牛村,这里由一圈共 $n$ 个巨型蘑菇组成!这些蘑菇从 $1$ 到 $n$ 编号。在每个蘑菇旁,有 $n-1$ 个指向所有其他蘑菇的指示牌,总共有 $n(n-1)$ 个指示牌。

在某些指示牌上写有 $m$ 个连续的数字区间。在放置在蘑菇 $u[i]$ 旁且指向蘑菇 $v[i]$ 的指示牌上,写有从 $a[i]$ 到 $b[i]$(含两端)的所有数字($1 \le a[i] \le b[i] \le n, 1 \le i \le m$)。指示牌满足以下两条“清晰度规则”:

  1. 指示牌不能包含它所在的蘑菇的编号。形式化地,对于任意 $i$,有 $u[i] < a[i]$ 或 $b[i] < u[i]$。
  2. 放在同一个蘑菇旁的指示牌上的两个区间不能包含相同的数字。形式化地,如果 $i \neq j$ 且 $u[i] = u[j]$,则 $b[i] < a[j]$ 或 $b[j] < a[i]$。

注意,对 $v[i]$ 没有限制。

蜗牛能够完美地遵循指示牌上的说明。假设一只蜗牛当前在蘑菇 $c$,并希望最终到达蘑菇 $d$。如果 $c = d$,则她已到达目的地。否则,她会查看蘑菇 $c$ 旁的指示牌,并找到包含数字 $d$ 的指示牌。她沿着该指示牌前往下一个蘑菇 $v[i]$,并重复此过程。

不幸的是,指示牌本身可能并不完美。如果蜗牛在任何指示牌上都找不到目的地蘑菇 $d$ 的编号,她就会被困住,无法继续前进。另一方面,指示牌可能会让蜗牛陷入无限循环,而永远无法经过蘑菇 $d$。

定义指示牌的效用值为满足以下条件的有序对 $(s, d)$ 的数量:从蘑菇 $s$ 出发的蜗牛可以通过遵循指示牌到达蘑菇 $d$。

Stuart 想要改进指示牌以最大化效用值。由于资源匮乏,最多只能对指示牌进行 $k$ 次修改。修改有两种类型:在指示牌上添加一个新数字,或者删除一个已有的数字。在进行修改后,两条清晰度规则必须仍然满足。修改后,指示牌上包含的数字不一定需要是连续的区间。

帮助 Stuart 找到在进行最优修改后,可能达到的最大效用值。

输入格式

程序必须从标准输入读入。

输入的第一行包含三个空格分隔的整数 $n$、$m$ 和 $k$,分别表示蘑菇的数量、区间的数量以及允许的最大修改次数。

接下来的 $m$ 行,每行包含四个空格分隔的整数。其中第 $i$ 行包含 $u[i]$、$v[i]$、$a[i]$ 和 $b[i]$,表示初始时,在蘑菇 $u[i]$ 旁指向蘑菇 $v[i]$ 的指示牌上写有从 $a[i]$ 到 $b[i]$ 的第 $i$ 个连续数字区间。

输出格式

程序必须输出到标准输出。

输出一个整数,表示在自由进行最多 $k$ 次修改后,可能达到的最大效用值。

数据范围

对于所有测试数据,输入满足以下范围:

  • $2 \le n \le 150\,000$
  • $1 \le m \le 300\,000$
  • $0 \le k \le 10^{12}$
  • 对于所有 $1 \le i \le m$,有 $1 \le u[i], v[i] \le n$ 且 $u[i] \neq v[i]$
  • 对于所有 $1 \le i \le m$,有 $1 \le a[i] \le b[i] \le n$
  • 对于所有 $1 \le i \le m$,有 $u[i] < a[i]$ 或 $b[i] < u[i]$
  • 如果 $i \neq j$ 且 $u[i] = u[j]$,则 $b[i] < a[j]$ 或 $b[j] < a[i]$

子任务

你的程序将在满足以下限制的输入实例上进行测试:

子任务 分值 附加限制
0 0 样例测试数据
1 6 $n \le 200, m \le 400, k = 0$
2 6 $n \le 1500, m \le 3000, k = 0$
3 22 $n \le 1500, m \le 3000, k \le 10$
4 11 $n \le 1500, m \le 3000, k \le 1000$
5 7 $n \le 1500, m \le 3000$
6 20 $n \le 30\,000, m \le 60\,000, k = 0$
7 15 $n \le 30\,000, m \le 60\,000$
8 13 无附加限制

样例

输入样例 1

6 7 0
1 2 2 3
2 5 3 3
2 5 6 6
4 5 2 3
5 4 1 1
5 6 3 3
6 1 2 5

输出样例 1

8

说明 1

下图展示了村庄中的蘑菇和非空指示牌。

假设一只蜗牛想要从蘑菇 6 移动到蘑菇 2。他找到了包含数字 2 的指示牌,该指示牌指向蘑菇 1,于是他移动到那里。由于他还没有到达蘑菇 2,他再次寻找包含数字 2 的指示牌。它指向蘑菇 2,于是他移动到那里。因此,他可以通过遵循指示牌成功到达蘑菇 2。

满足条件的有序对 $(s, d)$ 分别为 $(1, 1)$、$(2, 2)$、$(3, 3)$、$(4, 4)$、$(5, 5)$、$(6, 6)$、$(1, 2)$ 和 $(6, 2)$。效用值为 8。由于 $k = 0$,无法进行任何修改,因此答案为 8。

输入样例 2

6 7 1
1 2 2 3
2 5 3 3
2 5 6 6
4 5 2 3
5 4 1 1
5 6 3 3
6 1 2 5

输出样例 2

10

说明 2

指示牌初始时与样例 1 相同。我们可以进行 $k = 1$ 次修改。

一种最优方案是在蘑菇 5 旁指向蘑菇 6 的指示牌上添加数字 2。除了样例 1 中的 8 个有序对 $(s, d)$ 之外,我们还得到了 $(4, 2)$ 和 $(5, 2)$。效用值为 10。

输入样例 3

6 7 2
1 2 2 3
2 5 3 3
2 5 6 6
4 5 2 3
5 4 1 1
5 6 3 3
6 1 2 5

输出样例 3

13

说明 3

指示牌初始时与样例 1 相同。我们可以进行 $k = 2$ 次修改。

一种最优方案是从蘑菇 6 旁指向蘑菇 1 的指示牌上删除数字 3,并在蘑菇 6 旁指向蘑菇 3 的指示牌上添加数字 3。这使得蜗牛可以从任意蘑菇出发,通过遵循指示牌移动到蘑菇 3。效用值为 13。

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.