EduBrick

H. Канистра побольше

3000 мс · 256 МБ · всё или ничего

Как классная задача H, но канистра вмещает kk баков, а не один.

В городе можно купить сразу несколько баков бензина: один заливается в бак, остальные — в канистру, и в канистре не может оказаться больше kk баков. Каждый купленный бак стоит cic_i. Переливание из канистры в бак по-прежнему бесплатно.

Состояние — пара «город и сколько баков в канистре», то есть (n)×(k+1)(n) \times (k + 1) вершин. Переходы из (i,j)(i, j) по дороге в город tt:

  • если j≥1j \ge 1: перелить и ехать — цена 00, попадаем в (t,j−1)(t, j - 1);
  • купить qq баков, где 1≤q≤k+1−j1 \le q \le k + 1 - j: цена q⋅ciq \cdot c_i, попадаем в (t,j+q−1)(t, j + q - 1).

При k=1k = 1 это ровно классная задача — полезно проверить себя на её примере.

Обратите внимание, что покупать больше, чем помещается, бессмысленно, а покупать бак, когда канистра не пуста, — иногда осмысленно: бензин в дешёвом городе лучше дорогого впереди.

Формат ввода

Первая строка содержит числа nn (1≤n≤1001 \le n \le 100) и kk (1≤k≤51 \le k \le 5).

Вторая строка — nn чисел cic_i (0≤ci≤1000 \le c_i \le 100).

Третья строка — число дорог MM, далее MM строк с парами городов. Дороги двусторонние, между парой городов не более одной дороги, петель нет.

Формат вывода

Одно число — наименьшая суммарная стоимость или −1-1.

Примеры

ввод
4 1
1 10 2 15
4
1 2
1 3
4 2
4 3
вывод
2
ввод
5 2
1 100 100 100 100
4
1 2
2 3
3 4
4 5
вывод
103
Войдите, чтобы отправлять решения.