loj#P3976. 「JOISC 2023 Day4」警卫

「JOISC 2023 Day4」警卫

题目描述

题目译自 JOISC 2023 Day4 T2 「警備員 / Security Guard

JOI 国有 NN 座岛屿,编号为 11NN。每个岛屿有一个不安全等级,岛屿 i (1iN)i\ (1\le i\le N) 的不安全等级为 SiS_i

在 JOI 国,船运是通用的运输方式。有 MM 条船,编号为 11MM。船 j (1jM)j\ (1\le j\le M) 连接岛屿 AjA_jBjB_j。船可根据需要随时出航。可以通过一些数量的船从任意一个岛屿前往任意其他岛屿。

JOI 国计划引入新船。我们可以选择任意岛屿对,让这对岛屿用新引进的船直接通航。

一天发生了一个事故,一条停泊的船被袭击了。JOI 国的首相 K 决定引入新船的同时,还需要满足以下安全条件

  • 当一艘船停靠在岛屿 i (1iN)i\ (1\le i\le N) 时,在船上的警卫数量要大于等于 SiS_i

然而,因为雇佣警卫很贵,我们想最小化雇佣警卫的人数。只要满足「可以通过一些数量的船从任意一个岛屿前往任意其他岛屿」这一条件,可以停止目前正在运行的航线。

因此,我们会按如下方法运营航线。此处,kk 是新引进的船只数:

  1. 对于新引进的 kk 艘船中的每一艘,选择两座岛屿,让这对岛屿用新引进的船直接通航

  2. 选择一些(大于等于 00 艘)船并停止这条航线。允许停止新引进的船形成的航线

  3. 对于每艘船,让它停靠在它所连接的两座岛屿中的一座。然后安排一定数量的警卫上船。此外,还需满足如下条件:

    条件:对于每对岛屿 u,v (1u,vN)u,v\ (1\le u,v\le N),可以通过重复如下操作几次来运输一名乘客从岛屿 uu 前往岛屿 vv。在这个过程中,应全程满足安全条件

    • 让一个乘客或警卫登上停靠在这个乘客或警卫所在岛的船
    • 让一个乘客或警卫在这艘船停靠的岛下船
    • 让一艘船从它目前停靠的岛出发前往它所连接的另一个岛

因为预算有限,可以最多引入 QQ 艘船。对于每个 k (0kQ)k\ (0\le k\le Q),K 首相想知道如果新引进 kk 艘船的话最少要雇佣多少警卫。

给定岛屿,航线信息和可以引进的船数,写一个程序计算对于每个 kk,当引入 kk 艘船时最少要雇佣的警卫人数。

输入格式

第一行三个整数 N,M,QN,M,Q

第二行 NN 个整数 S1,S2,,SNS_1,S_2,\ldots,S_N

接下来 MM 行,每行两个整数 Ai,BiA_i,B_i

输出格式

输出 Q+1Q+1 行,第 (k+1) (0kQ)(k+1)\ (0\le k\le Q) 行输出一个整数,表示当新引进 kk 艘船时,最少要雇佣的警卫人数。

4 3 0
2 1 3 2
1 2
2 3
3 4

7

如果新引进的船是 00,需要 77 个警卫。按如下方式安排船和警卫就可以满足条件了:

  • 11 最初停在岛屿 22,有 22 名警卫登上船 11
  • 22 最初停在岛屿 22,有 22 名警卫登上船 22
  • 33 最初停在岛屿 44,有 33 名警卫登上船 33

下面用如下两个例子解释如何运输乘客:

  • 把乘客从岛屿 11 运输到岛屿 44
  • 把乘客从岛屿 33 运输到岛屿 22

可以按如下方法把乘客从岛屿 11 运输到岛屿 44。船停靠的岛屿和船上的警卫数均按船 1,2,31,2,3 的顺序展示。岛屿上的警卫数按岛屿 1,2,3,41,2,3,4 的顺序展示。

# 操作 船停靠的岛屿 船上警卫数 岛上警卫数
- - 2,2,42,2,4 2,2,32,2,3 0,0,0,00,0,0,0
11 让船 11 从岛屿 22 移动到岛屿 11 1,2,41,2,4
22 让一个乘客上船 11
33 让船 11 从岛屿 11 移动到岛屿 22 2,2,42,2,4
44 让一个乘客和一个警卫下船 11 1,2,31,2,3 0,0,1,00,0,1,0
55 让一个乘客和一个警卫上船 22 1,3,31,3,3 0,0,0,00,0,0,0
66 让船 22 从岛屿 22 移动到岛屿 33 2,3,42,3,4
77 让一个乘客下船 22
88 让船 33 从岛屿 44 移动到岛屿 33 2,3,32,3,3
99 让一个乘客上船 33
1010 让船 33 从岛屿 33 移动到岛屿 44 2,3,42,3,4
1111 让一个乘客下船 33

可以按如下方法把乘客从岛屿 33 运输到岛屿 22

# 操作 船停靠的岛屿 船上警卫数量 岛上警卫数
- - 2,2,42,2,4 2,2,32,2,3 0,0,0,00,0,0,0
11 让一个警卫下船 11 1,2,31,2,3 0,1,0,00,1,0,0
22 让一个警卫上船 22 1,3,31,3,3 0,0,0,00,0,0,0
33 让船 22 从岛屿 22 移动到岛屿 33 2,3,42,3,4
44 让一个乘客上船 22
55 让船 22 从岛屿 33 移动到岛屿 22 2,2,42,2,4
66 让一个乘客下船 22

因为不可能雇佣小于等于 66 名警卫以满足条件,所以输出 77

这组样例满足子任务 2,3,4,5,6,72,3,4,5,6,7 的限制。

4 3 1
2 1 3 2
1 2
2 3
3 4

7
5

如果新引进的船数量为 00,类似样例 1 的,需要 77 名警卫。

如果新引进的船数量为 11,需要 55 名警卫。可以按如下方式分配警卫以满足条件:

  • 用引进的船连接岛屿 22 和岛屿 44(下面称这条船为船 44
  • 停止船 33 所在航线
  • 11 最初停在岛屿 22,有 22 名警卫登上船 11
  • 22 最初停在岛屿 22,有 11 名警卫登上船 22
  • 44 最初停在岛屿 22,有 22 名警卫登上船 44

这组样例满足子任务 5,6,75,6,7 的限制。

3 3 0
1 1 1
1 2
1 3
2 3

2

如果新引进的船数量为 00,需要 22 名警卫。可以按如下方式分配警卫以满足条件:

  • 停止船 33 所在航线
  • 11 最初停在岛屿 11,有 11 名警卫登上船 11
  • 22 最初停在岛屿 11,有 11 名警卫登上船 22

这组样例满足子任务 4,5,6,74,5,6,7 的限制。

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

14

这组样例满足所有子任务的限制。

8 7 0
16 39 36 23 15 48 23 56
1 2
1 3
2 4
2 5
3 6
3 7
7 8

245

这组样例满足子任务 3,4,5,6,73,4,5,6,7 的限制。

10 13 4
314 159 265 358 979 323 846 264 338 327
1 2
1 4
2 3
2 5
3 6
4 5
4 7
5 6
5 8
6 9
7 8
8 9
9 10

3139
2901
2722
2567
2461

这组样例满足子任务 5,6,75,6,7 的限制。

数据范围与提示

对于所有输入数据,满足:

  • 2N2×1052\le N\le 2\times 10^5
  • N1M4×105N-1\le M\le 4\times 10^5
  • 0Q2×1050\le Q\le 2\times 10^5
  • 1Si1091\le S_i\le 10^9
  • $1\le A_j<B_j\le N,(A_x,B_x)\neq (A_y,B_y)\ (1\le x<y\le M)$
  • 可以通过一些数量的船从任意一个岛屿前往任意其他岛屿

详细子任务附加限制及分值如下表所示。

子任务编号 附加限制 分值
11 M=N1,Q=0,Si2,Aj=j,Bj=j+1M=N-1,Q=0,S_i\le 2,A_j=j,B_j=j+1 1212
22 M=N1,Q=0,Aj=j,Bj=j+1M=N-1,Q=0,A_j=j,B_j=j+1 1313
33 M=N1,Q=0M=N-1,Q=0 1212
44 Q=0Q=0 1313
55 N16N\le 16 88
66 N3 000N\le 3\ 000 1818
77 无附加限制 2424