restructure zeta/** to storage/zeta/**
This commit is contained in:
48
storage/zeta/py/completed/1197.py
Normal file
48
storage/zeta/py/completed/1197.py
Normal file
@@ -0,0 +1,48 @@
|
||||
import sys
|
||||
|
||||
input = sys.stdin.readline
|
||||
|
||||
|
||||
class MinimumSpanningTree:
|
||||
def __init__(self, V: int, E: int, edges: list[tuple[int]]):
|
||||
self.V = V
|
||||
self.E = E
|
||||
self.edges: list[tuple[int]] = edges
|
||||
|
||||
self.edges.sort(key=lambda x: x[2])
|
||||
self.__parents = [i for i in range(self.V + 1)]
|
||||
|
||||
def __root(self, x: int) -> int:
|
||||
node = x
|
||||
while node != self.__parents[node]:
|
||||
node = self.__parents[node]
|
||||
return node
|
||||
|
||||
def __union(self, x: int, y: int):
|
||||
rx = self.__root(x)
|
||||
ry = self.__root(y)
|
||||
if rx > ry:
|
||||
self.__parents[ry] = rx
|
||||
else:
|
||||
self.__parents[rx] = ry
|
||||
|
||||
def solve(self):
|
||||
mst = []
|
||||
for e in self.edges:
|
||||
a = e[0]
|
||||
b = e[1]
|
||||
if self.__root(a) == self.__root(b):
|
||||
continue
|
||||
mst.append(e)
|
||||
self.__union(a, b)
|
||||
|
||||
if len(mst) == self.V - 1:
|
||||
break
|
||||
return sum(map(lambda x: x[2], mst))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
V, E = map(int, input().split())
|
||||
edges = [tuple(map(int, input().split())) for _ in range(E)]
|
||||
solver = MinimumSpanningTree(V, E, edges)
|
||||
print(solver.solve())
|
||||
Reference in New Issue
Block a user