제출 #1166108

#제출 시각아이디문제언어결과실행 시간메모리
1166108u6714508시간이 돈 (balkan11_timeismoney)Pypy 3
45 / 100
178 ms53152 KiB
class unionf:
    def __init__(self, n):
        self.parent = list(range(n))
        self.rank = [0] * n
        
    def find(self, u):
        if self.parent[u] != u:
            self.parent[u] = self.find(self.parent[u])
        return self.parent[u]

    def union(self, u, v):
         rootu = self.find(u)
         rootv = self.find(v)
         if rootu != rootv:
             if self.rank[rootu] > self.rank[rootv]:
                 self.parent[rootv] = rootu
             elif self.rank[rootu] < self.rank[rootv]:
                 self.parent[rootu] = rootv
             else:
                 self.parent[rootv] = rootu
                 self.rank[rootu] += 1

def kruskal(n ,map1):
    map1.sort(key=lambda x: (x[2], x[3]))
    uf  = unionf(n)
    mst = []
    sumt , sumc = 0 , 0
    for u , v , t ,c in map1:
        if uf.find(u) != uf.find(v):
            uf.union(u,v)
            mst.append((u, v))
            sumt += t
            sumc += c
        if len(mst) == n-1:
              break
    return sumt , sumc , mst

N, M = map(int, input().split())
edges = [tuple(map(int, input().split())) for _ in range(M)]
#N = 5 
#M = 7 
#edges = [
#    (0, 1, 161, 79),
#    (0, 2, 161, 15),
#   (0, 3, 13, 153),
#    (1, 4, 142, 183),
#    (1, 4, 236, 80),
#    (2, 4, 40, 241),
#    (2, 1, 65, 92)
#] 
sumt, sumc, mst = kruskal(N, edges)
print(sumt, sumc)
for u, v in mst:
    print(u, v)

컴파일 시 표준 출력 (stdout) 메시지

Compiling 'timeismoney.py'...

=======
  adding: __main__.pyc (deflated 45%)

=======
#Verdict Execution timeMemoryGrader output
Fetching results...