luogu#P16573. [USACO26OPEN] Haybale Stacks

[USACO26OPEN] Haybale Stacks

题目描述

注意:本题时间限制为 2.5s2.5\text{s}

农夫约翰有 NN 堆干草捆(1N51051 \le N \le 5 \cdot 10^5),其中第 ii 堆包含 aia_i 个干草捆(1ai1091 \le a_i \le 10^9)。他想移走所有这些干草捆,并且有 MM1M25001 \le M \le 2500)头奶牛可供雇佣。如果雇佣第 ii 头奶牛,它会以花费 cic_i1ci1091 \le c_i \le 10^9)的代价,重复执行以下操作 sis_i 次(1si1001 \le s_i \le 100):

  • 如果当前堆中至少有 pip_i 个干草捆(1pi1091 \le p_i \le 10^9),那么这头奶牛会移走一个干草捆。
  • 如果当前堆中的干草捆少于 pip_i 个,则奶牛什么也不做。

对于每一堆干草,FJ 希望将其中的所有干草捆全部移走。他通过按顺序雇佣奶牛(同一头奶牛可多次雇佣)直到该堆变空来实现。请帮助 FJ 确定移空每一堆干草所需的最小总花费。

输入格式

第一行包含 TT1T1001 \le T \le 100),表示独立测试用例的数量。每个测试用例的格式如下:

第一行包含一个整数 NN

第二行包含 NN 个整数 a1,a2,,aNa_1, a_2, \ldots, a_N

第三行包含一个整数 MM

接下来 MM 行,每行包含三个整数 pi,si,cip_i, s_i, c_i

保证奶牛能够移空每一堆中的所有干草捆。此外,保证所有测试用例的 NN 之和不超过 51055 \cdot 10^5,所有测试用例的 MM 之和不超过 25002500

输出格式

对于每个测试用例,输出一行 NN 个空格分隔的整数,其中第 ii 个整数表示移空第 ii 堆干草所需的最小花费。

2
3
15 100 10
4
101 1 1
1 4 8
9 3 5
15 2 3
3
15 100 10
4
101 1 1
1 1 5
9 1 8
15 1 3
29 155 21
73 328 50

提示

第一个测试用例:对于初始大小为 1010 的最后一堆,我们可以雇佣一次奶牛 33,花费 55,它会移走两次干草捆(不是三次,因为第二次移走后剩余干草捆数量变为 88)。然后我们可以雇佣两次奶牛 22,移走剩余的 88 个干草捆,使堆变空。总花费为 5+8+8=215 + 8 + 8 = 21

第二个测试用例:满足 max(s)=1\max(s) = 1

计分规则

  • 输入 22-33ai100a_i \le 100
  • 输入 44-55max(s)=1\max(s) = 1
  • 输入 66-99max(s)4\max(s) \le 4
  • 输入 1010-1515max(s)20\max(s) \le 20
  • 输入 1616-2121:无额外限制。

翻译由 DeepSeek V4 Pro 完成