Pagini recente » Cod sursa (job #2930232) | Cod sursa (job #512725) | Cod sursa (job #2660730) | Cod sursa (job #2492749) | Cod sursa (job #3183229)
class DisjointSet:
def __init__(self, vertices):
self.parent = {}
self.rank = {}
for v in range(1, vertices + 1):
self.parent[v] = v
self.rank[v] = 0
def find(self, vertex):
if self.parent[vertex] != vertex:
self.parent[vertex] = self.find(self.parent[vertex])
return self.parent[vertex]
def union(self, vertex1, vertex2):
root1 = self.find(vertex1)
root2 = self.find(vertex2)
if root1 != root2:
if self.rank[root1] < self.rank[root2]:
self.parent[root1] = root2
elif self.rank[root1] > self.rank[root2]:
self.parent[root2] = root1
else:
self.parent[root1] = root2
self.rank[root2] += 1
def kruskal(vertices, edges):
edges = sorted(edges, key=lambda x: x[2])
result = []
disjoint_set = DisjointSet(vertices)
for edge in edges:
u, v, weight = edge
if disjoint_set.find(u) != disjoint_set.find(v):
result.append(edge)
disjoint_set.union(u, v)
return result
def main():
num_vertices, num_edges = map(int, input().split())
edges = []
for _ in range(num_edges):
u, v, weight = map(int, input().split())
edges.append((u, v, weight))
minimum_spanning_tree = kruskal(num_vertices, edges)
print("Edges in the Minimum Spanning Tree:")
for edge in minimum_spanning_tree:
print(edge)
if __name__ == "__main__":
main()