难度系数:⭐⭐⭐
考察题型:图论
涉及知识点:最小生成树-并查集
思路分析:
套用最小生成树模板-并查集。
#模板-并查集
def root(x):#查找→根节点
if x!=p[x]:
p[x]=root(p[x])
return p[x]
def union(x,y):#合并←两节点
if root(x) != root(y):
p[root(y)]=root(x)
def cost(x,y):#计算权值
s=0
while x or y:
if x%10 !=y%10:
s+=x%10+y%10
x//=10
y//=10
return s
#最小生成树
p=[i for i in range(2022)]#p:父节点列表
edge=[(i,j,cost(i,j)) for i in range(1,2022) for j in range(1,2022)]#生成边集合列表
edge.sort(key=lambda x:x[2])#sort:按权值升序排序
cnt,ans=0,0
for i in edge:
if root(i[0])!=root(i[1]) and cnt<2020:#cnt:边数=最大顶点数-1
union(i[0],i[1])
ans+=i[2]
cnt+=1
print(ans)#4046
参考链接:
Python之最小生成树 kruskal_m0_62277756的博客-CSDN博客
我写的是关于蓝桥杯的系列题解,感谢关注我的朋友们,我会持续输出高质量文章
蓝桥杯python组十二届省赛第二场真题+解析+代码(通俗易懂版)_编程有了思路-CSDN博客在 C/C++/Java/Python 等语言中,使用 % 表示求余,请问 2021%20 的值是多少?https://blog.csdn.net/m0_55148406/article/details/122790119