#HK4285. 「KTSC 2021 R2」会议室
「KTSC 2021 R2」会议室
注意事项
在 LibreOJ 上,由于语言限制,目前只支持以下语言的提交:
- C++(标准为 C++ 17 及以上)
请在提交源代码前添加 #include "meeting.h"。
题目描述
题目译自 2021년도 국제정보올림피아드 대표학생 선발고사 - 2차 선발고사 T2 「회의실」
有 个会议室, 个会议需要使用这些会议室。每个会议从 到 编号。会议 的开始时间为 ,结束时间为 ,违约金为 。
这些会议室有一些特殊的规则。会议 和会议 满足以下任一条件时,称它们是相关会议:
- 两个时间段 和 有重叠(即使只有开始或结束时间重叠),则 和 是相关会议。
- 两个时间段 和 没有重叠,但另一个会议 与 相关,并且 和 有重叠(即使只有开始或结束时间重叠),则 和 是相关会议。
会议可能会被取消,因此上述定义仅适用于未取消的会议。也就是说,原本相关的两个会议,可能因为某些会议被取消而不再相关。
未取消的会议必须分配到一个会议室。所有相关的会议必须分配到不同的会议室。例如,三个会议 ,尽管 和 之间没有重叠,但仍需要分配三个会议室,而不是两个。由于会议室只有 个,因此可能需要取消一些会议。取消会议 需要支付违约金 ,因此我们希望通过合理选择取消的会议,最小化支付的违约金总额。
下图展示了 个会议 ,每个会议的违约金依次为 。假设有 个会议室。左图中,通过取消会议 满足条件,此时违约金为 。右图中,通过取消会议 和 满足条件,此时违约金为 。综合所有情况,最小违约金总额为 。

实现细节
你需要实现以下函数:
long long int min_charge(int K, vector<int> S, vector<int> E, vector<int> W);
- 该函数只会被调用一次。
- 参数
K是会议室的数量。 - 参数
S、E、W的长度均为 。 - 会议 的开始时间为
S[i],结束时间为E[i],违约金为W[i]。 - 该函数返回在满足条件的情况下,取消会议所需支付的最小违约金总额。
注意,提交的代码中不应包含任何输入输出操作。
样例
考虑 $N=5, K=2, S=[1,3,5,7,9], E=[4,6,8,10,12], W=[1,2,5,2,1]$ 的情况。
评测程序将调用如下函数:
min_charge(2, [1,3,5,7,9], [4,6,8,10,12], [1,2,5,2,1]);
根据上文的示例解释,min_charge 函数应返回 3。
注意,这个示例不满足子任务 2 和 3 的条件。
数据范围与提示
对于所有输入数据,满足:
详细子任务附加限制及分值如下表所示。
| 子任务 | 分值 | 附加限制 |
|---|---|---|
| 对于所有 , | ||
| 无附加限制 |
示例评测程序
示例评测程序按以下格式读取输入:
- 第 行:
- 第 行:
示例评测程序按以下格式输出:
- 第 行:函数
min_charge返回的值
示例评测程序可能与实际评测程序不同。