#SLT08D. 2026年S组模拟赛10连测第8场-T4 程老师的区域封锁
2026年S组模拟赛10连测第8场-T4 程老师的区域封锁
| 项目 | 内容 |
|---|---|
| 输入文件名 | blockade.in |
| 输出文件名 | blockade.out |
| 可执行文件名 | blockade |
| 每个测试点时限 | 1.0 秒 |
| 内存限制 | 512 MiB |
| 测试点数目 | 20 |
| 是否等分 | 是 |
结果比较方式为全文比较(过滤行末空格及文末换行)。
题目描述
程老师分管一片值守区域。区域里一共有 个节点,编号 到 ,其中 号是总控中心。节点之间铺设了 条链路,铺法保证任意两个节点之间恰有一条通路(沿链路走,不重复经过任何节点)。
总控中心把命令一级一级往下传。除 号以外,每个节点都有唯一的上级:从它出发,沿唯一的那条通路走向 号,紧邻它、且更靠近 号的那个节点就是它的上级;反过来,若节点 的上级是 ,就说 是 的下级。除 号以外,没有下级的节点称为末梢节点。
一次封锁行动中,程老师可以选定任意若干个节点封锁(一个节点都不封也可以),封锁节点 的代价是 。行动有一条硬性要求:每一条从某个末梢节点到总控中心的通路上(通路包含两端节点在内),至少要有一个节点被封锁。
在满足这条要求的前提下,程老师希望总代价尽可能小;如果有多套封锁方案的总代价相同,他希望封锁的节点数尽可能少。请你给出这套封锁方案的总代价与封锁的节点数。
输入格式
从文件 blockade.in 中读入数据。
- 第一行一个整数 ;
- 第二行 个整数 ,其中 表示封锁节点 的代价;
- 接下来 行,每行两个整数 ,表示节点 与节点 之间有一条链路。
输出格式
输出到文件 blockade.out 中。
输出一行两个整数,中间用一个空格隔开:最小的总代价,以及在总代价最小的前提下最少的封锁节点数。
样例
5
10 5 4 3 2
1 2
1 3
3 4
3 5
9 2
样例 1 解释
节点 都没有下级,是仅有的三个末梢节点( 号是总控中心,不算末梢),因此通路 、、 都必须被覆盖。若只封锁 号,三条通路一条不落,代价 ,封锁 个节点;若改封锁 号,代价 ,通路 与 一并被覆盖,比分别封锁 号与 号()更划算。剩下通路 上只有 号与 号两个节点,封锁 号代价 ,封锁 号代价 ,取 号。于是封锁 号与 号,总代价 ,封锁 个节点,比只封锁 号的代价 更低。
2
3 7
1 2
3 1
样例 2 解释
区域里只有两个节点: 号的上级是 号,而 号没有下级,所以 号是唯一的末梢节点,通路 上只有 号与 号这两个节点。封锁 号代价 ,封锁 号代价 ,两种方案都只封锁 个节点,取代价较小的那种,于是总代价为 、封锁节点数为 。
数据范围
对于所有测试数据,保证:
- ,;
- 链路连接的两个节点编号不同,且任意两个节点之间恰有一条通路。
各测试点的约束如下:
| 测试点 | 特殊性质 | |
|---|---|---|
| 无 | ||
| A | ||
| B |
- 特殊性质 A:每个节点至多只有一个下级节点。
- 特殊性质 B:所有节点的封锁代价都相等。
- ID
- 3800
- 类型
- 传统题
- Time Limit
- 1000ms
- Memory Limit
- 512MiB
- 上传者