Мое решение O (n) основано на предположении, что перед тем, как вы начнете изменять ребра, вы должны найти MST (не приводится с графиком).Для этого вы можете использовать алгоритм Крускала, который работает в O (n log n), и в качестве побочного эффекта выдает отсортированный список ребер.В его стоимости преобладает сортировка, поэтому, когда вы изменяете вес ребра, вы можете удалить его из отсортированного списка в O (log n), вставить его с новым значением, также в O (log n), и, наконец, вызвать Kruskalснова алгоритм, который теперь работает за линейное время, потому что ребра отсортированы.
Это линейное решение, как вы и просили, но похоже, что это можно сделать быстрее.