OneCompiler

Kruskal

90

class DisjointSet:
def init(self, n):
self.parent = [i for i in range(n)]

def find(self, x):
    if self.parent[x] != x:
        self.parent[x] = self.find(self.parent[x])  
    return self.parent[x]

def union(self, x, y):
    rootX = self.find(x)
    rootY = self.find(y)
    if rootX != rootY:
        self.parent[rootY] = rootX
        return True
    return False

def kruskal(n, edges):
dsu = DisjointSet(n)
mst = []
edges.sort()

print("\nEdge : Weight")
for weight, u, v in edges:
    if dsu.union(u, v):
        mst.append((u, v, weight))
        print(f"{u} - {v} : {weight}")

n = int(input("Enter number of vertices: "))
e = int(input("Enter number of edges: "))

edges = []
print("Enter each edge in the format: u v weight")
for _ in range(e):
u, v, w = map(int, input().split())
edges.append((w, u, v))

kruskal(n, edges)