CF1775B Gardener and the Array

题目描述

园丁 Kazimir Kazimirovich 有一个包含 $n$ 个整数 $c_1, c_2, \dots, c_n$ 的数组。 他想要检查是否存在两个不同的原数组的子序列 $a$ 和 $b$,使得 $f(a) = f(b)$,其中 $f(x)$ 表示序列 $x$ 中所有数字的按位或(bitwise OR)。 如果序列 $q$ 可以通过从序列 $p$ 中删除若干(可以为零或全部)元素得到,则称 $q$ 是 $p$ 的一个子序列。 如果两个子序列在原数组中的元素下标集合不同,则认为这两个子序列是不同的,也就是说,比较子序列时不考虑元素的值,只考虑它们在原数组中的下标集合。

输入格式

每组输入包含多个测试用例。第一行包含一个整数 $t$($1 \le t \le 10^5$),表示测试用例的数量。接下来是每个测试用例的描述。 每个测试用例的第一行包含一个整数 $n$($1 \le n \le 10^5$),表示数组 $c$ 的大小。 本题中,数组 $c$ 的描述采用隐式方式以加快输入速度。 接下来 $n$ 行的第 $(i+1)$ 行以一个整数 $k_i$($1 \le k_i \le 10^5$)开头,表示 $c_i$ 中被置为 $1$ 的比特位数量。接下来是 $k_i$ 个互不相同的整数 $p_{i,1}, p_{i,2}, \dots, p_{i,k_i}$($1 \le p_{i,j} \le 2 \cdot 10^5$),表示 $c_i$ 中被置为 $1$ 的比特位编号。换句话说,$c_i = 2^{p_{i,1}} + 2^{p_{i,2}} + \ldots + 2^{p_{i,k_i}}$。 保证所有测试用例中 $\sum k_i \le 10^5$。

输出格式

对于每组输入,如果存在两个不同的子序列使得 $f(a) = f(b)$,输出 "Yes";否则输出 "No"。 你可以以任意大小写输出答案(如 "yEs"、"yes"、"Yes"、"YES" 都会被判为正确)。

说明/提示

可以证明,在第一个测试用例中不存在两个不同的子序列 $a$ 和 $b$ 满足 $f(a) = f(b)$。 在第二个测试用例中,存在一种可能的答案:子序列 $a$ 由第 $1$ 个元素组成,子序列 $b$ 由第 $1$ 个和第 $2$ 个元素组成。 在第三个测试用例中,存在一种可能的答案:子序列 $a$ 由第 $1$、$2$、$3$、$4$ 个元素组成,子序列 $b$ 由第 $2$、$3$、$4$ 个元素组成。 由 ChatGPT 4.1 翻译