算法问题 690:换向后最大化等效对数

小夏 财经 更新 2024-01-28

you are given a list of integers of the same length a and b. you are also given a two-dimensional list of integers c where each element is of the form [i, j] which means that you can swap a[i] and a[j] as many times as you want.return the maximum number of pairs where a[i] = b[i] after the swapping.constraintsn ≤ 100,000 where n is the length of a and bm ≤ 100,000 where m is the length of cexample 1inputa = [1, 2, 3, 4]b = [2, 1, 4, 3]c = [ 0, 1], 2, 3]]output4explanationwe can swap a[0] with a[1] then a[2] with a[3].
问题的核心是,如果 A 中的 [0,1] 是可互换的,而 [1,2] 是可互换的,那么 [0,1,2] 是任意可互换的。

也就是说,可互换它已连接。这种连接是否有助于解决问题?是的!

根据 C 的互换关系,我们可以将 A 划分为几个相连的域。 对于每个连接的域,我们可以随意交换它。 因此,我们可以枚举每个连接域,对于连接域中的每个索引 i,让我们看看 b 中是否有对应的 b[j] == a[i],其中 i 和 j 是同一连接域中的两个点。

具体算法:首先,根据C语言构建集合并进行查询。 然后,每个连接域都存储在一个字典组中,其中 group[i] = list,i 是连接域的元,list 是连接域的点列表。 枚举每个连接域,对于连接域中的每个索引 i,让我们看看 b 中是否有对应的 b[j] == a[i],其中 i 和 j 是同一连接域中的两个点。 积累答案 **支持:python3

python3 code:

class uf: def __init__(self, m): self.parent = {}self.CNT = 0 初始化 Range(M): self 中 i 的 parent、size 和 cnt。parent[i] = i self.cnt += 1 def find(self, x): if x != self.parent[x]: self.parent[x] = self.find(self.parent[x]) return self.parent[x] return x def union(self, p, q): if self.connected(p, q): return leader_p = self.find(p) leader_q = self.find(q) self.parent[leader_p] = leader_q self.cnt -= 1 def connected(self, p, q): return self.find(p) == self.find(q)class solution: def solve(self, a, b, c): n = len(a) uf = uf(n) for fr, to in c: print(fr, to) uf.union(fr, to) group = collections.defaultdict(list) for i in uf.parent: group[uf.find(i)].append(i) ans = 0 for i in group: indices = group[i] values = collections.counter([a[i] for i in indices]) for i in indices: if values[b[i]] 0: values[b[i]] = 1 ans += 1 return ans
复杂性分析

设 n 是数组的长度 a,v 是图形的点数,e 是图形的边数。

时间复杂度:$o(n+v+e)$Space复杂度:$o(n)$We也可以使用BFS或者DFS来生成组,生成组后的逻辑大家都是一样的,所以把这两种方案留给你去实现吧。

相似文章

    Inconel 690合金应力腐蚀百科全书

    冶金因素有助于铬镍铁合金合金的抗应力腐蚀性。铬镍铁合金合金作为一种镍含量较高的高温合金,以其在压水反应堆 蒸发器 传热管等极端条件下优异的抗应力腐蚀性能而闻名。自世纪年代问世以来,经过近年的应用和研究,INCONEL 的性能在许多方面得到了优化和提高,特别是在核电站蒸发器传热管材料的应用中。Inco...

    逆矩阵算法详解

    逆矩阵是指对于给定的方阵 即行数等于列数的矩阵 存在使得两者的乘积是统一矩阵 对角线上的元素为 ,其他元素为 如果矩阵存在逆矩阵,则逆矩阵通常用 a 表示。n n 矩阵 a 的逆矩阵 a 存在的条件是矩阵 a 是可逆的 也称为非奇异秩或全秩 即矩阵 a 的行列式 det a 不等于 。以下是计算逆矩...

    中国诗歌鉴赏题 阅读题目应该有标准答案吗?

    在语言学习中,诗歌欣赏和阅读问题是学生遇到的常见问题类型。然而,这类问题是否应该有一个标准答案一直是一个有争议的话题。有人认为,这些问题应该有标准答案,因为它们可以帮助学生更好地理解诗歌和论文,并可以评估学生的习成果。但是,也有人认为这些问题不应该有标准答案,因为每个人的理解都不同,应该尊重学生的个...

    快速排序 高效的就地排序算法

    快速排序是一种常用的排序算法,它采用了分而治之的思想,与合并排序不同,快速排序是原位排序的,即不需要额外的空间来存储中间结果。在本文中,我们将了解快速排序的工作原理 工作原理以及它在对子数组进行排序时的作用。快速排序的算法步骤如下 哨兵分部 首先,我们需要选择一个基准编号作为哨兵。通常,我们选择数组...

    算法ICP备案的流程与周期

    在申请算法备案的过程中,了解流程和周期非常重要。一般情况下,申请算法ICP备案的流程包括以下步骤 第一步是提交申请。企业需要向相关部门提交算法备案申请,申请必须包括企业的基本信息 算法的相关信息 使用目的等。在提交申请之前,公司需要准备所有相关文件,并确保所提供的信息真实准确。第二步是审计。企业提交...