题解 | #继续畅通工程#

继续畅通工程

https://www.nowcoder.com/practice/16212f7d46e44174b5505997ea998538

class UnionFind:
    def __init__(self,n):
        self.pt=[i for i in range(n+1)]
        self.h=[0 for i in range(n+1)]
    def find(self,x):
        if self.pt[x]!=x:
            return self.find(self.pt[x])
        return x
    def union(self,x,y):
        px,py=self.pt[x],self.pt[y]
        if px==py:
            return
        if self.h[px]>self.h[py]:
            self.pt[y]=self.find(x)
        elif self.h[px]<self.h[py]:
            self.pt[x]=self.find(y)
        else:
            self.pt[x] = self.find(y)
            self.h[py]+=1
while True:
    try:
        n = int(input())
        if n==0:
            break
        v = UnionFind(n)
        edge = []
        for i in range(n * (n - 1) // 2):
            x = list(map(int, input().split(' ')))
            if x[3] == 1:
                x[2] = 0
            edge.append(x)
        edge.sort(key=lambda x: x[2])
        sum = 0
        for i in range(n * (n - 1) // 2):
            if v.find(edge[i][0]) != v.find(edge[i][1]):
                sum += edge[i][2]
                v.union(v.find(edge[i][0]), v.find(edge[i][1]))
        print(sum)
    except:
        break

全部评论

相关推荐

11-28 17:58
门头沟学院 Java
美团 JAVA开发 n×15.5
牛客786276759号:百度现在晋升很难的 而且云这块的业务没美团好 你看百度股价都跌成啥样了
点赞 评论 收藏
分享
10-24 11:10
山西大学 Java
若梦难了:哥们,面试挂是很正常的。我大中厂终面挂,加起来快10次了,继续努力吧。
点赞 评论 收藏
分享
10-07 23:57
已编辑
电子科技大学 Java
八街九陌:博士?客户端?开发?啊?
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务