图论之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)

浙公网安备 33010602011771号