2
def findCriticalAndPseudoCriticalEdges(3
self, n: int, edges: List[List[int]]7
parent[v] = find(parent[v], parent)10
def union(u, v, parent):11
parent[find(u, parent)] = find(v, parent)13
edges = [(u, v, w, i) for i, (u, v, w) in enumerate(edges)]14
edges.sort(key=lambda e: e[2])16
def find_mst_without_this_edge(idx):17
parent = list(range(n))19
for i, (u, v, w, _) in enumerate(edges):22
if find(u, parent) != find(v, parent):25
root = find(0, parent)27
res if all(find(i, parent) == root for i in range(n)) else float("inf")30
def find_mst_with_this_edge(idx):31
parent = list(range(n))32
u0, v0, w0, _ = edges[idx]35
for i, (u, v, w, _) in enumerate(edges):38
if find(u, parent) != find(v, parent):41
root = find(0, parent)43
res if all(find(i, parent) == root for i in range(n)) else float("inf")46
base_mst_wgt = find_mst_without_this_edge(-1)47
cri, pcri = set(), set()48
for i in range(len(edges)):49
wgt_excl = find_mst_without_this_edge(i)50
if wgt_excl > base_mst_wgt:53
wgt_incl = find_mst_with_this_edge(i)54
if wgt_incl == base_mst_wgt: