eolymp
bolt
Попробуйте наш новый интерфейс для отправки задач
Задачи

Удивительные гонки

Удивительные гонки

Гонки "мусорщик идёт на охоту" решили организовать для участников соревнования по программированию. Вдобавок к начальной и конечной точке гонок существуют еще n (n20) других мест которые можно посетить. В каждом месте i (1in) находится задание, выполнение которого принесет Вам pi очков. Для выполнения задания требуется ti минут. Каждое задание может быть выполнено только один раз, так что участник не может вернуться в одно и то же место более одного раза. После начала гонок нельзя вернуться в точку старта, гонки завершаются как только будет достигнута конечная точка.

Гонки должны завершиться за t минут. То есть время между стартом и прибытием в конечную точку не должно превышать t минут. К тому же некоторые задачи имеют предельный срок (дедлайн) di, то есть задача должна быть выполнена не позже чем через di минут после выхода из стартовой точки. Если участник прибывает в место i, то задача в точке i обязательно должна быть выполнена. Если участник прибывает в точку поздно и не может выполнить задачу в ней до завершения дедлайна, тогда он вообще не имеет права заходить в эту точку.

Найдите наибольшее количество очков, которое можно получить от выполнения задач.

Входные данные

Первая строка содержит два натуральных числа n и t (t1440). Каждая из следующих n строк содержит три целых числа pi (1 ≤ pi100), ti (1ti1440) и di (-1di1440). Если di = -1, то предельного срока для выполнения i-ой задачи не существует. Последние n + 2 строки содержат n + 2 неотрицательных целых числа. Число в i-ой строке и j-ом столбце содержит количество минут (≤ 1440) которое требуется чтобы дойти от места i к месту j. Индексы начальной и конечной точки соответственно равны n + 1 и n + 2.

Гарантируется, что время путешествия от каждого места до него же самого равно 0, но время путешествия между двумя точками в разных направлениях может быть различным (в одну сторону может быт подъем, а в обратную тогда будет спуск).

Выходные данные

В первой строке вывести максимальное количество очков, которое можно заработать в гонках. Во второй строке вывести список индексов задач, которые следует выполнить для достижения этого максимума. Индексы следует разделять одним пробелом. Если максимум достигается на нескольких множествах задач, то вывести лексикографически наименьшее. То есть если один и тот же максимум достигается на двух множествах, то индекс первой задачи во множестве должен быть наименьшим. Если первые индексы во множествах равны, то следует выбрать то где второй индекс наименьший, и так далее.

Если наибольшее количество очков равно 0, то во второй строке вместо индексов задач следует вывести пустую строку.

Лимит времени 2 секунды
Лимит использования памяти 256 MiB
Входные данные #1
3 352
93 82 444
92 76 436
99 62 -1
0 70 66 71 97
76 0 87 66 74
62 90 0 60 94
60 68 68 0 69
83 78 83 73 0
Выходные данные #1
99
3
Входные данные #2
5 696
96 88 532
99 70 519
96 66 637
90 92 592
95 94 -1
0 67 80 81 60 83 61
72 0 99 68 85 93 82
100 91 0 88 99 70 68
69 65 77 0 65 68 75
63 65 91 96 0 92 100
65 76 85 62 89 0 75
93 83 74 65 88 84 0
Выходные данные #2
386
1 2 3 5
Источник 2015 ACM North America - Rocky Mountain, Problem C