图论之kruskal算法

kruskal的算法模板

class Edge:
    def __init__(self,l,r,val):
        self.l=l
        self.r=r
        self.val=val
n=10001
father=list(range(n))
def init():
    global father
    father=list(range(n))
def find(u):
    if u!=father[u]:
        father[u]=find(father[u])
    return father[u]
def join(s,t):
    root_s=find(s)
    root_t=find(t)
    if root_s!=root_t:
        father[root_t]=root_s
def kruskal(v,edges):
    edges.sort(key=lambda edge:edge.val)
    init()
    result_val=0
    for edge in edges:
        x=find(edge.l)
        y=find(edge.r)
        if x!=y:
            result_val+=edge.val
            join(x,y)
    return result_val
if __name__=="__main__":
    import sys
    input=sys.stdin.read
    data=input().split()
    index=0
    v=int(data[index])
    index+=1
    e=int(data[index])
    index+=1
    edges=[]
    for _ in range(e):
        v1=int(data[index])
        index+=1
        v2=int(data[index])
        index+=1
        val=int(data[index])
        index+=1
        edges.append(Edge(v1,v2,val))
    result_val=kruskal(v,edges)
    print(result_val)

posted @ 2026-06-02 16:02  zidurile  阅读(8)  评论(0)    收藏  举报