CF2205C Simons and Posting Blogs
题目描述
这人生就像一档电视节目,我们随着剧情推进而被卷动。
—— SHUN,[TRAP](https://open.spotify.com/track/4lfS48CaivAm4QaimqbAPv)
有 $n$ 个博客。第 $i$ 个博客按顺序提及了 $l_i$ 个用户,记为一个数组 $a_i = [a_{i,1},a_{i,2},\ldots,a_{i,l_i}]$。
你将依次发布所有 $n$ 个博客。我们维护一个序列 $Q$,用于描述你最近提及过的用户列表。你需要恰好进行 $n$ 次如下操作:
- 选择一个尚未发布的博客 $i$($1\leq i\leq n$),然后发布它。对于该博客中每个 $1\leq j\leq l_i$,按照顺序进行以下操作:
- 如果 $a_{i,j}$ 已经在 $Q$ 中,則将 $a_{i,j}$ 移动到 $Q$ 的开头。
- 否则,将 $a_{i,j}$ 插入到 $Q$ 的开头。
请你求出,在所有发布顺序中,最终得到的 $Q$ 的字典序最小值$^{\ast}$。
$^{\ast}$ 对于数组 $x$ 和 $y$,如果满足以下条件之一,则称 $x$ 的字典序小于 $y$:
- $x$ 是 $y$ 的前缀,且 $x\ne y$;
- 在第一个不相等的位置,$x$ 的元素小于 $y$ 的对应元素。
输入格式
每个测试用例包含多组数据。第一行包含测试用例个数 $t$($1 \leq t \leq 1000$)。
每组数据第一行是一个整数 $n$($1 \leq n \leq 3000$)——博客数量。
接下来 $n$ 行,第 $i$ 行以一个正整数 $l_i$($1 \leq l_i \leq 3000$)开头,表示第 $i$ 个博客提及的用户数。随后跟着 $l_i$ 个整数 $a_{i,1},a_{i,2},\ldots,a_{i,l_i}$($1\leq a_{i,j} \leq 10^6$),表示该博客中提及的用户列表。
保证所有测试用例的 $n$ 之和不超过 $3000$。记 $\sum\limits_{i=1}^n l_i$ 为 $L$,保证所有测试用例的 $L$ 之和不超过 $3000$。
输出格式
记 $m$ 为所有博客中被提及至少一次的用户数量。对于每个测试用例,输出 $m$ 个整数 $Q_1,Q_2,\ldots,Q_m$,表示字典序最小的 $Q$。
说明/提示
在第一个测试用例中,可以按如下方式发布博客:
- 首先发布第一个博客,$Q$ 变为 $[6,4,3,2,1]$。
- 再发布第三个博客,$Q$ 变为 $[3,2,9,1,6,4]$。
- 最后发布第二个博客,$Q$ 变为 $[1,5,2,3,9,6,4]$。
也可以选择另一种发布顺序:
- 首先发布第三个博客,$Q$ 变为 $[3,2,9,1]$。
- 再发布第一个博客,$Q$ 变为 $[6,4,3,2,1,9]$。
- 最后发布第二个博客,$Q$ 变为 $[1,5,2,6,4,3,9]$。
可以看出 $[1,5,2,3,9,6,4]$ 比另一种方案更小。如果第二个博客不在最后一个发布,则数组第一个元素无法为 $1$,所以 $[1,5,2,3,9,6,4]$ 是字典序最小的 $Q$。
在第二个测试用例中,可以按如下顺序发布:
- 先发第一个博客,$Q = [6,1]$。
- 再发第二个博客,$Q$ 保持为 $[6,1]$。
在第三个测试用例中,只有一个博客可选,$Q = [1,6]$。
由 ChatGPT 5 翻译