## 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. Hint: Consider the cases e in T and e not in T separately. ## Algorithm description Let the edge whose weight decreases be e = (u, v). Update the weight of e in the graph. instance 1: e is already in the MST T Simply update its weight inside T. Lowering the weight of a tree edge cannot make T non-optimal, so no edges need to be replaced. instance 2: e is not in T Add e to T. Since T is a tree, adding one edge creates exactly one simple cycle. This cycle is formed by e plus the unique u-to-v path in T. Scan the cycle to find the edge f with the largest weight. If the new weight of e is less than the weight of f: Remove f and keep e in the tree. This yields a new spanning tree of strictly smaller weight. Otherwise: Do not modify T and simply disregard e. To obtain the path between u and v, run BFS or DFS on T (which has only V-1 edges). ``` fun reviseMST(Graph H, Tree M, Edge q, newW) { var a, b = endpoints(q); setWeight(q, newW); if (q belongsTo M) { return M; } var route = findTreePath(M, a, b); // unique path in MST via DFS/BFS var heavy = maxWeightEdge(route); // edge on route with maximum weight if (getWeight(q) < getWeight(heavy)) { M = M - {heavy}; M = M + {q}; } return M; } ``` ## Proof of Correctness: We explain why the algorithm always returns a minimum spanning tree after the weight decrease. instance 1: e is in T Reducing the weight of a tree edge only lowers the total weight of T. Since no other spanning tree becomes better relative to T, its structure does not need to change. T remains an MST. instance 2: e is not in T When e is added to T, exactly one cycle is formed. By the Cycle Property of MSTs: On any cycle, the heaviest edge cannot belong to an MST if there exists a lighter alternative on the same cycle. Two possibilities here: 1) New weight of e is less than the weight of the heaviest edge f on the cycle. In this case, an MST must include e and exclude f. Replacing f with e strictly reduces the total weight of T. The resulting tree is an MST for the updated graph. 2) New weight of e is greater than or equal to the weight of f. Here, using e does not improve the total weight. The cycle property does not force e into the MST, so the original T remains optimal and unchanged. Therefore, in all cases the algorithm preserves the minimum spanning tree. ## Time complexity: Checking whether e is in T: O(1) with appropriate storage. instance 1: Only update the weight: O(1). instance 2: BFS/DFS on T to find the u-to-v path: O(n) Scanning the path to find the maximum-weight edge: O(n) This is significantly faster than recomputing the MST from scratch.