Блог пользователя KADR

Автор KADR, 13 лет назад, По-русски
Теперь разбор завершен.

Задача A: Подарок (Роман Едемский)

Предположим, что оптимальным решением является пара (A, B), где A - количество золотых монет в подарке, а B - количество серебряных монет.  Нетрудно заметить, что существуют такие 2 индекса i и j (возможно совпадающих), что gi = A и sj = B, так как в противном случае мы бы могли уменьшить A или B, не нарушив связность графа.

Обозначим через R(A,B) граф, в котором для всех i выполняется gi ≤ A и  si ≤ B.

Обозначим через T(A) взвешенный граф, в котором для всех ребер выполняется ограничение gi ≤ A, а весами ребер будут si. Найдем в этом графе остовное дерево, у которого максимальное ребро - минимальное возможное. Можно показать, что для данного фиксированного A наименьшим значением B, при котором граф R(A, B) все еще связный, как раз будет это значение максимального ребра.

Утверждение. Минимальный остов графа одновременно является остовом, у которого максимальное ребро - минимальное возможное.
Доказательство. Рассмотрим любой минимальный остов L. Если существует остов P, у которого все ребра имеют строго меньший вес, чем вес максимального ребра у L. Тогда мы могли бы удалить из L макс. ребро и заменить его каким-то ребром из P, тем самым уменьшив его вес. Поскольку L - минимальный остов, мы не можем уменьшить его вес, следовательно такого P не существует.

Отсортируем все ребра исходного графа по возрастанию gi. Переберем все возможные значения A среди gi. Тогда ребрами графа T(A) для фиксированного i будут все ребра с индексами j ≤ i. Осталось научиться быстро находить мин. остов в этом графе.

Предположим, что мы для какого-то i нашли мин. остов в графе T(gi) (в случае, если граф несвязный, то в каждой его компоненте связности найден мин. остов). Добавим в него i + 1-е ребро. Если это ребро соединяет разные компоненты связности, просто добавим его, в противном случае в дереве образуется ровно один цикл. Найдем в нем максимальное ребро и удалим его из графа, получив таким образом новый минимальный остов в компоненте, куда добавилось ребро (доказательство опускается).

Поиск максимального ребра в цикле на дереве можно осуществить за O(N), а весь алгоритм будет работать за O(NM + MlogM).

Задача B: Мыши и сыр (Роман Ризванов)

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

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

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

Сложность решения O(N + M).

Также существует решение этой задачи при помощи динамического программирования.

Задача C: Мутация (Ярослав Твердохлеб)

В разборе вместо терминов "риск", "геном" и "ген" будут использоваться термины "стоимость", "строка" и "символ". Обозначим начальную строку через S.

Обозначим через M битовую маску символов, которые будут удалены. Переберем все возможные M. Для фиксированного M найдем стоимость строки, которая получилась и если она не превышает T - увеличим ответ на 1. Реализация этого алгоритма "в лоб" работает за O(2KN).

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

Рассмотрим некоторую пару индексов символов из начальной строки l и r. Обозначим через M' битовую маску всех символов, которые лежат строго между ними. Если или , то, очевидно, эти позиции рядом никогда не будут. Отсюда можно сделать вывод, что для фиксированного l возможных положений для r может быть не больше, чем K. Значит, всего таких пар O(NK). Определим, какой вид должно иметь множество M, чтобы после его удаления эти позиции оказались рядом? Нетрудно заметить, что для этого должны выполняться такие 2 условия:

1.
2.

Переберем все допустимые пары l и r, для каждой найдем M'. Попутно для каждой тройки (a,b,P) будем хранить сумму стоимостей соседства всех пар l и r, для которых Sl = a, Sr = b, M' = P. После этого для фиксированного M переберем все пары символов (a, b), а так же подмножества P и просуммируем стоимости, которые мы сохранили. Прибавим к этому стоимость выбрасывания символов из M и получим конечную стоимость строки. Сложность решения O(3K * K2 + NK).

Попробуем улучшить предыдущее решение, засчет уменьшения множителя при 3K. Рассмотрим такой (неправильный) алгоритм:
Переберем все допустимые пары l и r и для каждой найдем M'. Заведем массив v, в котором для каждой маски P будем хранить сумму стоимостей соседства для всех пар l и r, для которых M' = P. Для фиксированного M найдем сумму значений из v по всем подмаскам M, прибавим к ней стоимость удаления M и получим конечную стоимость строки.

Этот алгоритм не является правильным, так как некоторые стоимости соседства мы прибавим к суммарной стоимости, но на самом деле позиции не будут соседями, т.к. один из концов (или оба сразу) будут принадлежать M, т.е. будут удалены. Воспользуемся формулой включения-исключения и при заполнении массива v сделаем следующие действия:

v[M'] +  = cost

При таком заполнении v описанный выше алгоритм будет работать правильно и сложность станет O(3K + NK).

Этого все еще недостаточно, но мы уже почти у цели. Осталось научиться быстро считать сумму в массиве v по всем подмаскам M. Для этого рассмотрим следующий итеративный алгоритм:

Пусть перед первой итерацией у нас есть массив v, в котором хранятся начальные значения. После итерации с номером i в v[mask] будет храниться сумма значений из изначального массива v по всем подмаскам mask, для которых первые K - i бит совпадают с соответствующими битами маски mask. На итерации с номером i для всех масок, в которых i-й бит (нумерация с единицы) единичный сделаем сделаем такое: v[mask] +  = v[mask\{i}]. Нетрудно заметить, что после выполнения K итераций этого алгоритма в новом массиве v как раз и будут находиться суммы по всем подмаскам из изначального массива v.

Сложность алгоритма O(2KK + NK).

Задача D: Плюс и XOR (Даниил Нейтер)

Рассмотрим какой-то единичный бит в X. Если соответствующий бит в Y равен 0, то мы можем их поменять местами, уменьшив X и увеличив Y. При этом их сумма и xor не изменятся. Отсюда можно сделать вывод, что если какой-то бит равен единице в X то он будет равен единице и в Y. Отсюда Y = X + B. Учитывая, что X + Y = X + X + B = A,  получаем следующие формулы для нахождения X и Y:

X = (A - B) / 2
Y = X + B

Следует также учесть, что если выполняется хотя бы один из следующих пунктов:
  •  A < B
  • A и B имеют разную четность
  • X and (A - X) ≠ X, где and - побитовое "и"
то ответа не существует и следует вывести -1.

Задача E: Точки (Даниил Нейтер)

Если перегруппировать слагаемые, то можно разбить сумму на две:


Рассмотрим подсчет суммы по иксам:


Полученная формула позволяет посчитать ответ за 1 проход. Сложность решения O(N).


Задача F: Турист (Илья Порублев)

Из события i можно попасть в событие j, если выполняются условия:
  • ti ≤ tj
  • |xi - xj| ≤ |ti - tjV
Если события представлять в виде точек на координатной плоскости с координатами (xi, ti), то предыдущие 2 условия можно представить графически, а именно:

Из события i можно попасть в событие j, если точка (xj, tj) лежит внутри угла направленного вверх с вершиной в (xi, ti), а стороны которого образуют угол arctg(V) с вертикалью. Сделаем преобразование координат, при котором точка с координатами (xi, ti) переходит в точку (pi, qi), где
pi =  - xi + ti * V
qi = xi + ti * V

Тогда условие того что из события i можно попасть в событие j принимает вид: pi ≤ pj и qi ≤ qj. Отсортируем все точки по возрастанию координаты p, а при равном p - по возрастанию q. Задача (та часть, где можно самому выбирать стартовую точку) сводится к тому, чтобы в получившемся массиве найти самую длинную возрастающую подпоследовательность по q. Это можно сделать за O(NlogN).

Чтобы решить часть, в которой турист стартует из точки (0, 0) можно создать фиктивное событие со временем 0 и абсциссой 0 (если такого еще небыло) и потребовать чтобы мы обязательно посетили его первым.

Суммарная сложность решения O(NlogN).
  • Проголосовать: нравится
  • +30
  • Проголосовать: не нравится

13 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
"Можно заметить, что биты установленные в X установлены и в Y"
Совершенно непонятно что имеется ввиду.
  • 13 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Это означает, что если есть единичный бит в числе Х , то он обязательно будет в числе У.
    • 13 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      Если уж писать перебор с целью что-то заметить, то проще заметить уже, что только (A - B) / 2 является решением. Ну а доказать, что A должно быть не меньше B - проще простого. Отсюда остается только не забыть использовать unsigned. Хотелось бы попросить какое-то более конкретное решение. То есть прямо с выводами и доказательствами. Такое имеется? Заранее спасибо.
      • 13 лет назад, # ^ |
          Проголосовать: нравится +15 Проголосовать: не нравится
        Предположим некоторый бит в X равен 1, а в Y равен 0. Тогда эти два бита можно поменять, не изменив X + Y и X xor Y и уменьшив X, т.е., получив лучшее решение.

        Вряд ли имелось в виду, что нужно написать перебор с целью это заметить.
        • 13 лет назад, # ^ |
            Проголосовать: нравится 0 Проголосовать: не нравится
          Спасибо, Иван. Теперь все понятно. Вот и в пост Ярослав добавил пояснение.
          • 13 лет назад, # ^ |
              Проголосовать: нравится 0 Проголосовать: не нравится
            Еще можно D решать динамикой.
            Пусть dp[i][j] = минимальному префиксу X (я перевернул числа, то есть идем от младшего бита), что есть префикс Y,  что X + Y = A, X ^ Y = B (тоже префиксы A и B). При этом j - это есть перенос разряда в сумме или нет.
            Ну и ответ на задачу будет лежать в dp[64][0], а Y = A - dp[64][0].
        • 13 лет назад, # ^ |
          Rev. 2   Проголосовать: нравится +5 Проголосовать: не нравится

          По задаче D  есть несколько интересных тестов, например : 7 3

          Ваше решение X=(A-B)/2 и т д должно дать ответы 2 и 5, но если их проксорить то они не дадут вам 3 . Вот вам и тестирующая система (сам сдал эту задачу с точно таким же алгоритмом).

          • 13 лет назад, # ^ |
              Проголосовать: нравится 0 Проголосовать: не нравится
            Вы правы. Просто автор обзора забыл добавить, что в случае, если (x&(A-x)!=x), то нужно тоже выводить -1, что как раз и случилось в вашем случае =)
      • 13 лет назад, # ^ |
          Проголосовать: нравится +3 Проголосовать: не нравится
        Вот то, что я писал на Всеукре:
        Если xor чисел = 1 , то очевидно, что на таком разряде бит в одном числе 1 в другом 0, так как мы минимизируем 1е число , то ставим этот бит во второе число. Расставим полностью все биты для которых xor = 1. Теперь у нас остались только биты xor которых = 0, то есть они должны быть равными. Переведем число которое получилось после первого перехода и отнимем его от нужной суммы, пускай это будет ost. Зная что 2i>2i-1+2i-2+...1 получаем жадность, идем по битам , если xor равен 0 и 2i+1 <= ost то ставим на этот разряд в оба числа 1 иначе 0.
  • 13 лет назад, # ^ |
      Проголосовать: нравится +8 Проголосовать: не нравится
    Изменил. Так понятнее?
    • 13 лет назад, # ^ |
        Проголосовать: нравится +1 Проголосовать: не нравится
      Да, спасибо! Теперь даже непонятно чем именно первый вариант был плох %)
    • 13 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      Кстати, да, как заметил Zool (тестом 7 3 =), по этой задаче вы забыли отметить еще один важный случай несуществования решения: если (x&(a-x)!=x)
13 лет назад, # |
Rev. 2   Проголосовать: нравится +8 Проголосовать: не нравится
Вопрос по А. А как добавлять/удалять ребра из остова за O(1)?
Извиняюсь, это здесь не нужно.
  • 13 лет назад, # ^ |
      Проголосовать: нравится +5 Проголосовать: не нравится
    Можно за O(N), это асимптотику не ухудшит. 
    • 13 лет назад, # ^ |
        Проголосовать: нравится +5 Проголосовать: не нравится
      Вообще успевает даже построение дерева заново на каждом шаге. Т.е. добавляем к прошлому дереву доп. ребро и просто все перестраиваем (я даже пересортировывал заново для простоты).
      • 13 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится
        На самой олимпиаде ТЛ был 0.5 сек при том что авторское решение работало 0.25, так что там надо было писать за O(NM). Здесь ТЛ больше и компьютеры мощнее, так что главное чтобы асимптотика была та же. Ну или, как оказалось, не сильно отличалась.
  • 13 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Да, O(N) в данном случае хватает.
    Но на самом деле хочется это уметь за log в какой-то степени от N.
13 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Небольшая помарочка в А: граф T(A) в общем случае лес, а не дерево.
13 лет назад, # |
  Проголосовать: нравится +8 Проголосовать: не нравится
Thanks very much, I think E's solution is genial. I understood it now, but it would be very difficult for me to come out with a similar thought :)
13 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
А может кто-нибудь выложить 16 тест к задаче A, он большой и не отображается целиком?
  • 13 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Это первый тест в котором 50000 ребер. Думаю, если сгенеришь рандомный тест такого же размера, вердикт будет тем же.
    • 13 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      В том то и дело что нет, у меня на макс тесте работает меньше 2 сек.
13 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Два комментария:
Задачу B можно было также решать динамическим программированием - кода чуть побольше, зато думать поменьше. Я написал рекурсию с запоминанием, состояние - номер текущей мыши, последний кусок сыра, который кто-то ел до этого и количество мышей его евших.
Задачу E при заданных ограничениях можно было сдать за квадрат. Ведь различных координат всего 20001 (по x и по y). Можно было завести массив, где сказано, сколько точек с заданной координатой и в лоб посчитать ответ.
13 лет назад, # |
  Проголосовать: нравится +8 Проголосовать: не нравится
Если кому-нибудь любопытно, D решал динамическим программированием. F(pos, carry) - пара чисел с наименьшим первым значением, такая что их xor равен первым pos битам B, а сумма равна первым pos битам A, причем если carry, то в текущей позиции существует перенос знака.
13 лет назад, # |
Rev. 3   Проголосовать: нравится -10 Проголосовать: не нравится
В задаче B "сложность решения O(N)" ну никак не может быть... Она как минимум O(M + N), а то и O(M + N * Log(M)). Потому что "найти для каждой мыши ближайший сыр слева и справа" требует не O(1), а как минимум O(Log(M)).
  • 13 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    В условии сказано, что и мыши и сыр отсортированы по возрастанию координаты. Мы можем легко слить их в один отсортированный массив и в нем за линию найти для каждой мыши ближайший сыр.
    • 13 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      Тогда O(N + M), т.к. координаты кусков сыра надо вычитать как минимум.
      • 13 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится
        Ну да, под O(N) имелось ввиду вместе N и M. Исправил.
13 лет назад, # |
Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится
Hi,

I would like to ask about problem F. Is there a particular reason why you sort by p first before you sort by q? If not, will sorting by q and then by p for tiebreak change the solution? If not, may I know if you can prove so? I can understand how you make the transformation and why the transformation is correct, but I am not convinced that you can get the optimal solution just by sorting and finding the LIS (Do you mean the longest non-decreasing subsequence? From what I understand, I think you first label the vertices according to the time when they appear. If they appear at the same time, then they have the same label.) Can you please give a proof or explanation why it works?

Thanks in advance!
  • 13 лет назад, # ^ |
    Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится
    If some two events have the same time then it is impossible to visit them both, so we are not interested in their relative order in the sorted array (after performing the transformation).

    After the transformation we can get from the point (pi, qi) to the point (pj, qj) iff pi ≤ pj and qi ≤ qj. After performing the sorting described in the editorial all points reachable from the point (pi, qi) will have greater indexes in the array. This automatically means that the sequence will be non-decreasing by pi, so we only need to care about qi. The longest non-decreasing sequence by qi is the sequence we are looking for.
  • 5 лет назад, # ^ |
      Проголосовать: нравится +8 Проголосовать: не нравится

    Hi,

    Now we can get to the event j from the event i if pi ≤ pj и qi ≤ qj. Let's sort all points in ascending order of p. If several points have the same p we will sort them by q. Can you please explain it for me?

    • 5 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится

      What do you want to be explained? Why "Now we can get to the event j from the event i if pi ≤ pj и qi ≤ qj."? Or what "If several points have the same p we will sort them by q." mean? Or what?

    • 5 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится

      Here is more detailed tutorial. It's in Ukrainian, but you can Google-translate it (result is poor, but some things are still correct) and look at figures and equations.

      I CAN try to reply on more concrete questions, but I don't want to translate the whole text...

      • 5 лет назад, # ^ |
        Rev. 4   Проголосовать: нравится 0 Проголосовать: не нравится

        Well, What are the significances of p, q axes and angle arctg(v)? What do they represent?

        What I understand before, as I mentioned in another comment's reply was as below: to go to j from i: abs(xj - xi) / tj - ti <= v so,

        xj + v*tj >= xi + ti*v and -xi + v*ti >= -xj + v*t

        • 5 лет назад, # ^ |
            Проголосовать: нравится 0 Проголосовать: не нравится

          Axis $$$p$$$ is the direction, where the tourist moves (in plane $$$(x,t)$$$), if his speed is ($$${-}v$$$), i.e.maximal by absolute value and directed to left. Its positive ray is the left-bottom border of the area where the tourist can get in time, starting from the origin of the $$$(p,q)$$$ coordiante system. Similarly, $$$q$$$ is the direction, where the tourist moves (in plane $$$(x,t)$$$), if his speed is ($$${+}v$$$), i.e. maximal by absolute value and directed to right; its positive ray is the right-bottom border of the area where the tourist can get in time, starting from the origin of the $$$(p,q)$$$ coordiante system.

          It's not very obvious to look at these axes... But, from other hand, it's not unnatural: we need some effective checking of where the tourist can get in time and where he cannot, so let's try: what, if we'll consider borders of the "reachable-in-time" area as coordinate axes?

          • 5 лет назад, # ^ |
            Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

            I hope this is my last query:

            If tourist needs to go from i to j where xi > xj, that time the velocity is negative. Right? And, the velocity can not be positive and negative at a time,

            But why do we check

            pi < pj and qi < qj ?
            

            Why not

            pi < pj or qi < qj?
            
            • 5 лет назад, # ^ |
                Проголосовать: нравится 0 Проголосовать: не нравится

              The axis directed from bottom to top is $$$t$$$ (time). The tourist cannot travel in time as he wants and/or change time flow direction. All what he can is to choose

              1. whether to stay at place with zero velocity (= move in direction of $$$t$$$, which is exactly in the middle between positive direction of $$$p$$$ and positive direction of $$$q$$$);

              2. or to move with velocity ($$$-v$$$), negative and maximal by absolute value, which is exactly positive direction of $$$p$$$;

              3. or to move with velocity ($$$+v$$$), positive and maximal by absolute value, which is exactly positive direction of $$$q$$$;

              4. or to move with velocity $$$0<w<v$$$ (where $$$v$$$ is $$$v$$$ from input data, and $$$w$$$ is actual tourist's velocity), which is in the same quadrant of the $$$(p,q)$$$-system (both $$$p$$$ and $$$q$$$ positive), but $$$q$$$-projection is bigger that $$$p$$$-projection; in other words, $$$0<w<v$$$ corresponds to $$$0<p<q$$$;

              5. or to move with velocity $$$-v<w<0$$$ (where $$$v$$$ is $$$v$$$ from input data, and $$$w$$$ is actual tourist's velocity), which is in the same quadrant of the $$$(p,q)$$$-system (both $$$p$$$ and $$$q$$$ positive), but $$$q$$$-projection is smaller that $$$p$$$-projection; in other words, $$$-v<w<0$$$ corresponds to $$$0<q<p$$$;

              Whereas $$$(q_i > q_j)$$$ (for moving from $$$i$$$ to $$$j$$$) requires either moving with speed $$$w$$$ which is $$$-\infty\leq w < -v$$$, or even moving in reverse direction of time. Similarly, $$$(p_i > p_j)$$$ (for moving from $$$i$$$ to $$$j$$$) requires either moving with speed $$$w$$$ which is $$$v<w\leq\infty$$$, or even moving in reverse direction of time. So, it's required to have both $$$(p_i\leq p_j)$$$ and $$$(q_i\leq q_j)$$$

13 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

i dont understand the transformation of (xi,ti), how does it work??? can anyone tell me the answer?

13 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
"It is obsiously that if or then l and r can not be neighbours in the remaining string."
What is "P"?
It seems that "P" hasn't been metioned before.
I really cannot understand this sentence.
And may "absiously" means "abviously"?

  • 13 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    It was a typo. "Obsiously" should be, of course, "obviously".

    Also I occasionally used P instead of M'. It is fixed now, thanks for pointing this out.
13 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Problem D is right?

I doubts it, for expleam, A=14 and B=4

then X=(14-4)/2=5  Y=5+4=9

and A>B and A and B have some parity and A-X=Y

but X^Y=5^9=12  
This is my doubts. And I think  (A-B)/2=X&Y .
But I don't know the specific X and Y values

  • 13 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Quote from the editorial:
    "If X and(A - X) ≠ X then the answer is also -1."
    Here X=5 and A-X=9. 5 and 9 = 1, which is not equal to 5. So the answer is -1 here.
    • 13 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      I was wrong,
      and is &

      But I saw many wrong program still through the test,

      and thank you very much for your patience solutions
  • 13 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    I'm sorry, X is smallest, but I'm think if the answer doesn't exist, should add a condition:  X^Y=B
»
6 лет назад, # |
  Проголосовать: нравится +1 Проголосовать: не нравится

Can someone explain the question Gift in this question it is asking for the minimum coins such that every road's gold coin and silver coin constraints are satisfied then if (A,B) is a valid solution then we can make A=infinite and B=infinite so that there will be always a solution also won't A=max(all gi's) and B=max(all si's ) where gi=minimum gold coins for ith road and si=minimum silver coins for ith road (this is what i have understood from the question can anyone tell what's wrong in my understanding )?

»
5 лет назад, # |
  Проголосовать: нравится -10 Проголосовать: не нравится

Problem D has weak testcases. My solution gets AC despite giving an incorrect answer on the testcase '10 6'.

»
5 лет назад, # |
  Проголосовать: нравится +11 Проголосовать: не нравится

Shit. This was 8 years ago.

»
3 года назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

How to solve A without MST??

Here's my approach