最小生成树一例

吊坠

import os
import sys
from collections import defaultdict
# 请在此输入您的代码
n,m=map(int,input().split())

l=[]
cnt=0
for i in range(n):
  a=input()
  a=a+a
  d=defaultdict(lambda:set())
  for j in range(1,m+1):
    for s in range(0,m):
      d[j].add(a[s:s+j])
  l.append(d)
que=[]  
for i in range(n):
  for j in range(i+1,n):
    for k in range(m,0,-1):
      if l[i][k]&l[j][k]:
        que.append((k,i,j))
        break
que.sort(key=lambda x:x[0],reverse=True)
f=[i for i in range(n)]
def find(x):
  if f[x]!=x:
    f[x]=find(f[x])
  return f[x]
cnt=0;res=0
for i in que:
  w=i[0];fa=find(i[1]);fb=find(i[2])
  if fa!=fb:
    f[fa]=fb
    cnt+=1
    res+=w
  if cnt==n-1:
    break
print(res)
posted @ 2025-04-05 19:18  邓佑孤  阅读(7)  评论(0)    收藏  举报