classSolution:defminimumHammingDistance(self, source: List[int], target: List[int], allowedSwaps: List[List[int]])->int:
res = n =len(source)
G=[set()for _ inrange(n)]for i,j in allowedSwaps:
G[i].add(j)
G[j].add(i)
seen =[0]*n
defdfs(i):
seen[i]=1
found.append(i)for j in G[i]:ifnot seen[j]:
dfs(j)for i inrange(n):if seen[i]:continue
found =[]
dfs(i)
count1 = collections.Counter(source[j]for j in found)
count2 = collections.Counter(target[j]for j in found)
res -=sum((count1 & count2).values())return res