QOJ.ac

QOJ

حد الوقت: 6 s حد الذاكرة: 512 MB مجموع النقاط: 100 الصعوبة: [عرض]

#2349. 矩形树

الإحصائيات

Mr. Peanutbutter 最近发现了一块漂亮的 $n \times n$ 农田,上面种植着各种农作物。Diane 告诉 Mr. Peanutbutter,这块农田世世代代都采用树状矩形法种植农作物。当 Mr. Peanutbutter 被一只鸟分散了注意力时,Diane 继续说道。

农田中的组合矩形是农田方格的一个子集,形式为 $A \times B$,其中 $A$ 和 $B$ 是集合 $\{0, \dots, n - 1\}$ 的子集。

矩形树是一棵有 $k$ 个结点的有根二叉树,具有以下性质:树的每个结点 $v$ 都被标记为一个组合矩形 $r(v) \subseteq \{0, \dots, n-1\} \times \{0, \dots, n-1\}$。如果 $s$ 是树的一个内部结点,$c_1$ 和 $c_2$ 是它的直接子结点,那么它们的组合矩形构成了 $r(s)$ 的一个划分:形式上,$r(s) = r(c_1) \cup r(c_2)$ 且 $r(c_1) \cap r(c_2) = \emptyset$。一个结点不能只有一个直接子结点。

令 $Crop(x, y)$ 为农田方格 $(x, y) \in \{0, \dots, n - 1\} \times \{0, \dots, n - 1\}$ 上种植的农作物类型。如果 $r(\text{Root}) = \{0, \dots, n - 1\} \times \{0, \dots, n - 1\}$,且对于每个叶子结点 $\ell$,组合矩形 $r(\ell)$ 上只种植一种类型的农作物(即对于任意两个 $(x, y), (x', y') \in r(\ell)$,都有 $Crop(x, y) = Crop(x', y')$),则称以 $\text{Root}$ 为根的矩形树 $T$ 计算了该农田的农作物类型。

树 $T$ 的深度是树的根结点与叶子结点之间的最大距离。此处,距离是指结点间最短路径上的边数。

树 $T$ 的大小是其包含的结点数。

给定一棵计算农作物类型 $Crop$ 的矩形树 $T$。令 $T$ 的大小为 $S$。请构造另一棵计算 $Crop$ 的矩形树 $T'$,使得其深度不超过 $3 \log_2 S$,且大小不超过 $5S$。

输入格式

第一行包含一个整数 $n$,表示农田的大小 ($1 \le n \le 1000$)。接下来的 $n$ 行,每行包含 $n$ 个整数,描述农作物的类型。第 $i$ 行的第 $j$ 个整数是方格 $(i, j)$ 上的农作物类型。所有类型均为不超过 $10^7$ 的正整数。

下一行包含一个整数 $S$,表示矩形树的大小 ($1 \le S \le 10\,000, S \cdot n \le 10^6$)。

接下来的 $S$ 行中,第 $i$ 行包含第 $i$ 个结点的描述。它包含若干个空格分隔的整数:$p, m_1, m_2, a_1, \dots, a_{m_1}, b_1, \dots, b_{m_2}$。其中 $p \in \{0, 1, \dots, S - 1\}$ 是结点 $i$ 的父结点编号(如果 $i$ 是根结点,则 $p = i$),该结点对应的组合矩形为 $r(i) = \{a_1, \dots, a_{m_1}\} \times \{b_1, \dots, b_{m_2}\}$。

保证如果 $\ell$ 是树的叶子结点,则 $r(\ell)$ 中的所有农作物类型相同。此外,对于每个具有直接子结点 $c_1$ 和 $c_2$ 的内部结点 $v$,矩形 $r(c_1)$ 和 $r(c_2)$ 构成了 $r(v)$ 的一个划分:$r(v) = r(c_1) \cup r(c_2)$ 且 $r(c_1) \cap r(c_2) = \emptyset$。最后,如果 $i$ 是根结点,则 $r(i) = \{0, \dots, n-1\} \times \{0, \dots, n-1\}$。

输出格式

输出一棵深度不超过 $3 \log_2 S$ 且大小不超过 $5S$ 的矩形树,使其同样计算给定的农作物类型。树的输出格式应与输入格式相同。

样例

输入 1

3
1 1 2
1 1 2
2 2 2
5
0 3 3 0 1 2 0 1 2
0 3 2 0 1 2 0 1
0 3 1 0 1 2 2
1 2 2 0 1 0 1
1 1 2 2 0 1

输出 1

7
0 3 3 0 1 2 0 1 2
0 1 3 2 0 1 2
1 1 2 2 0 1
1 1 1 2 2
0 2 3 0 1 0 1 2
4 2 1 0 1 2
4 2 2 0 1 0 1

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.