CF1980E Permutation of Rows and Columns

题目描述

给定一个 $n \times m$ 的矩阵 $a$,其中包含了从 $1$ 到 $n \cdot m$ 的一个排列。 $n$ 个整数的排列是一个包含从 $1$ 到 $n$ 的所有数字且每个数字恰好出现一次的数组。例如,数组 $[1]$、$[2, 1, 3]$、$[5, 4, 3, 2, 1]$ 是排列,而 $[1, 1]$、$[100]$、$[1, 2, 4, 5]$ 不是排列。 如果把矩阵的所有元素按顺序写成一个数组,这个数组是一个排列,则称该矩阵包含一个排列。矩阵 $[[1, 2], [3, 4]]$、$[[1]]$、$[[1, 5, 3], [2, 6, 4]]$ 包含排列,而 $[[2]]$、$[[1, 1], [2, 2]]$、$[[1, 2], [100, 200]]$ 不包含排列。 你可以在一次操作中执行以下两种操作之一: - 选择第 $c$ 列和第 $d$ 列($1 \le c, d \le m$,$c \ne d$),交换这两列; - 选择第 $c$ 行和第 $d$ 行($1 \le c, d \le n$,$c \ne d$),交换这两行。 你可以进行任意次数的操作。 给定原始矩阵 $a$ 和目标矩阵 $b$,请判断是否可以通过上述操作将矩阵 $a$ 变换为矩阵 $b$。

输入格式

第一行包含一个整数 $t$($1 \le t \le 10^4$),表示测试用例的数量。接下来是每个测试用例的描述。 每个测试用例的第一行包含两个整数 $n$ 和 $m$($1 \le n, m \le n \cdot m \le 2 \times 10^5$),表示矩阵的大小。 接下来的 $n$ 行,每行包含 $m$ 个整数 $a_{ij}$($1 \le a_{ij} \le n \cdot m$)。保证矩阵 $a$ 是一个排列。 再接下来的 $n$ 行,每行包含 $m$ 个整数 $b_{ij}$($1 \le b_{ij} \le n \cdot m$)。保证矩阵 $b$ 是一个排列。 保证所有测试用例中 $n \cdot m$ 的总和不超过 $2 \times 10^5$。

输出格式

对于每个测试用例,如果可以通过操作将第一个矩阵变换为第二个矩阵,输出 "YES";否则输出 "NO"。 你可以用任意大小写输出每个字母。例如,"yEs"、"yes"、"Yes"、"YES" 都会被判为正确答案。

说明/提示

在第二个样例中,原始矩阵如下: $$ \begin{pmatrix} 1 & 2 \\ 3 & 4 \end{pmatrix} $$ 交换第 $1$ 行和第 $2$ 行后,变为: $$ \begin{pmatrix} 3 & 4 \\ 1 & 2 \end{pmatrix} $$ 再交换第 $1$ 列和第 $2$ 列后,变为矩阵 $b$: $$ \begin{pmatrix} 4 & 3 \\ 2 & 1 \end{pmatrix} $$ 由 ChatGPT 4.1 翻译