Cod sursa(job #3335323)

Utilizator efiruFiru Eduard efiru Data 22 ianuarie 2026 12:48:05
Problema Arbore partial de cost minim Scor 70
Compilator py Status done
Runda Arhiva educationala Marime 1.17 kb
class DSU:
    def __init__(self , n: int):
        self.parent = list(range(n + 1))
        self.size = [1 for _ in range(n + 1)]

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

    def union(self , x: int , y: int) -> bool:
        rx , ry = self.find(x) , self.find(y)

        if rx == ry:
            return False

        if self.size[rx] < self.size[ry]:
            rx , ry = ry , rx

        self.parent[ry] = rx
        self.size[rx] += self.size[ry]
        return True




with open("apm.in" , "r") as f:
    n , m = map(int , f.readline().split())
    
    edges = []
    for _ in range(m):
        u , v , w = map(int , f.readline().split())
        edges.append((u , v , w))

edges.sort(key=lambda e : e[2])
dsu = DSU(n)
MST = []
cost = 0
taken = 0

for u , v , w in edges:
    if dsu.union(u , v):
        cost += w
        taken += 1
        MST.append((u , v))

        if taken == n - 1:
            break


with open("apm.out" , "w") as g:
    g.write(str(cost) + "\n")
    g.write(str(taken) + "\n")
    
    for u , v in MST:
        g.write(f"{u} {v}\n")