CF1710D.Recover the Tree
NOI/NOI+/CTSC
通过率:0%
时间限制:3.00s
内存限制:256MB
AC君温馨提醒
该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
Rhodoks has a tree with n vertices, but he doesn't remember its structure. The vertices are indexed from 1 to n.
A segment [l,r] (1≤l≤r≤n) is good if the vertices with indices l, l+1, ..., r form a connected component in Rhodoks' tree. Otherwise, it is bad.
For example, if the tree is the one in the picture, then only the segment [3,4] is bad while all the other segments are good.

For each of the 2n(n+1) segments, Rhodoks remembers whether it is good or bad. Can you help him recover the tree? If there are multiple solutions, print any.
It is guaranteed that the there is at least one tree satisfying Rhodoks' description.
罗多克斯有一棵包含 n 个顶点的树,但他不记得其具体结构了。这些顶点编号为 1 到 n。
若编号为 l,l+1,…,r(其中 1≤l≤r≤n)的顶点在罗多克斯的树中构成一个连通块,则称区间 [l,r] 是好的;否则称为坏的。
例如,若树的结构如图所示,则只有区间 [3,4] 是坏的,其余所有区间均为好的。

对于全部 2n(n+1) 个区间,罗多克斯都记得每个区间是好还是坏。你能帮他还原出这棵树吗?如果存在多种可能的解,输出任意一种即可。
题目保证至少存在一棵满足罗多克斯描述的树。
输入格式
Each test contains multiple test cases. The first line contains the number of test cases t (1≤t≤1000). The description of the test cases follows.
The first line of each test case contains an integer n (1≤n≤2000) — the number of vertices in the tree.
Then n lines follow. The i-th of these lines contains a string goodi of length n+1−i consisting of 0 and 1. If the segment [i,i+j−1] is good then the j-th character of goodi is 1, otherwise j-th character of goodi is 0.
It is guaranteed that the there is at least one tree consistent with the given data.
It is guaranteed that the sum of n over all test cases does not exceed 2000.
每个测试包含多个测试用例。第一行包含测试用例的数量 t(1≤t≤1000)。随后是各测试用例的描述。
每个测试用例的第一行包含一个整数 n(1≤n≤2000)——表示树中顶点的数量。
接下来是 n 行。其中第 i 行包含一个长度为 n+1−i 的字符串 goodi,该字符串仅由字符 0 和 1 组成。若区间 [i,i+j−1] 是“好”的,则 goodi 的第 j 个字符为 1;否则为 0。
保证至少存在一棵树与给定数据一致。
保证所有测试用例中 n 的总和不超过 2000。
输出格式
For each test case, print n−1 lines describing the tree you recover.
The i-th line should contain two integers ui and vi (1≤ui,vi≤n), denoting an edge between vertices ui and vi.
If there are multiple solutions, print any.
对于每个测试用例,输出 n−1 行,描述你恢复出的树。
第 i 行应包含两个整数 ui 和 vi(1≤ui,vi≤n),表示顶点 ui 与 vi 之间的一条边。
若存在多种解,输出任意一种即可。
输入输出样例
输入#1
3 4 1111 111 10 1 6 111111 11111 1111 111 11 1 12 100100000001 11100000001 1000000000 100000000 10010001 1110000 100000 10000 1001 111 10 1
输出#1
1 2 2 3 2 4 1 2 2 3 3 4 4 5 5 6 2 3 6 7 10 11 2 4 6 8 10 12 1 4 5 8 9 12 5 12 2 12
说明/提示
The first test case is explained in the statement.
In the second test case, one possible tree is as follows:

In the third test case, one possible tree is as follows:

第一个测试用例已在题目描述中说明。
在第二个测试用例中,一种可能的树如下所示:

在第三个测试用例中,一种可能的树如下所示:

输入解题思路,AI测评打分。不知道怎么写?