「JOISC 2023 Day4」 Security Guard

发布时间 2023-06-19 23:21:34作者: ~nebula~

subtask 1

因为 \(1\le s_i\le2\),所以每艘船上都至少有一个保安。令 \(cnt_i\) 表示第 \(i\) 艘船上的保安数,可以先将所有 \(cnt_i+=1\) ,所有 \(s_i-=1\)。经过这一次操作后,如果两艘船之间的小岛的 \(s_i\) 全为 \(0\),表示这两艘船可以相互到达,即可将这两艘船合并成一艘,然后再做一遍上述操作即可。

subtask 2

可以继续按照 subtask 1 的方法求答案,答案就是 \(\sum_{i=2}^{n-1}a[i]+max\{a_i\}\)

subtask3

按照 subtask1 的方法拓展到树上,答案是 \(\sum_{i=1}^n a_i\times(du_i-1)+max\{a_i\}\)

subtask4

因为 \(\sum_{i=1}^n a_i\times(du_i-1)+max\{a_i\}=\sum_{i=1}^ma_{u_i}+a_{v_i}-\sum_{i=1}^na_i-max\{a_i\}\),所以每条边的边权可以转换成 \(a_{u_i}+a_{v_i}\),然后找到最小生成树,答案就是最小生成树的权值和,不在最小生成树上的边直接报废即可。

subtask 5&6&7