---
# System prepended metadata

title: Updating One Edge in MST Problem

---

# Updating One Edge in MST Problem
## Problem:
Suppose we are given both an undirected graph G with weighted edges and a minimum spanning tree T of G. 

Describe an algorithm to update the minimum spanning tree when the weight of a single edge e is decreased.

The input to your algorithm is the edge e and its new weight; your algorithms should modify T so that it is still a minimum spanning tree.

## Algorithm Description
There are two cases to look at:

Case 1: The decreased edge e is already in the MST T
If e is already in T, reducing its weight only improves the total weight of T, it will still hold all properties of an MST, thus do nothing.

Case 2: The decreased edge e = (u,v) is not in the MST T
After decreasing the weight, edge e might become good enough to belong in the MST. If we try hadding it to T, the tree will become a cycle. In order to restore a spanning tree, we must remove the maximum weight edge on the unique path between u and v in T. We will do this by first inserting e into T, forming a cycle. Then we find the heaviest edge f on the u->v path in the current MST. If the weight of e is less than the weight of f, then replace f with e since it produces a cheaper spanning tree. Else, do nothing as the old MST would still be optimal.

``` 
fun updateMST(G, T, e, newWeight) {
    var u, v = endpoints of e;
    
    weight(e) = newWeight;
    
    if (e is in T) {
        return T;
    }
    
    var path = pathInT(u,v); a function that finds the unique path in the MST using dfs
    var f = edge with maximum weight on path;
    
    if (weight(e) < weight(f)) {
        T = T - {f};
        T = T + {e};
    }
    
    return T;
}
```

## Correctness Proof
Goal: Show that after the algorithm runs, the resulting Tree T' is a minimum spanning tree of G.

### Base Cases:
Case: e is in T
- If e is already belonging to the MST, decreasing its weight can't violate the cut or cycle properties, replacing no edges is necessary, and the tree stays a valid MST. Thus this is correct.

Case: E is not in T
- We add e to create a cycle and remove the heavist edge on that cycle if beneficial. This will follow from the Cycle Property. Since the old MST plus e creates exactly one cycle, removing the heaviest edge on the cycle will yield a valid MST. If the heaviest edge is not e, and e is now light enough, the replacement lowers the total weight and must be part of the new MST.

### Inductive Step
Assume the algorithm correctly maintains the MST property for all trees with fewer than n nodes.

Consider a tree T with n vertices. Adding an edge creates exactly one cycle due to the tree property. The algorithm removes exactly one edge, restoring a spanning tree. By the cycle property, choosing the maximum-weight edge ensures minimality, thus no other weights changed and no other part of the MST is affected.

Therefore, by inducted the updates structure is still an MST.

## Time Complexity
Let V = |V|, E = |E|

First check if e is in T, if so then O(1)
Then find path from u to v in MST using dfs which is O(V)
Then find the maximum-weight edge on that path doing a traversal of O(V)
Replace edge if needed which is O(1)

The total time complexity would be 
``` T(V) = O(V)```
