题解 | #继续畅通工程#

继续畅通工程

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-24 00:11
已编辑
广东工业大学 算法工程师
避雷深圳&nbsp;&nbsp;yidao,试用期&nbsp;6&nbsp;个月。好嘛,试用期还没结束,就直接告诉你尽快找下一家吧,我谢谢您嘞
牛客75408465号:笑死,直属领导和 hr 口径都没统一,各自说了一些离谱的被裁理由,你们能不能认真一点呀,哈哈哈哈哈😅😅😅
点赞 评论 收藏
分享
过往烟沉:我说什么来着,java就业面就是广!
点赞 评论 收藏
分享
我见java多妩媚:大外包
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
11-27 10:48
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务