测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

A16866. Tree Orientation (Easy Version)

编程题 普及+/提高

题目描述

这是该问题的简单版本。不同之处在于本版本中 $n$ 的约束较低。只有在解决了该问题所有版本后,你才能进行 hack。

你曾经有一棵包含 $n$ 个节点的无向树。为了让树看起来更有趣,你决定给每一条 $n-1$ 条边赋予一个任意方向。

随着时间的流逝,你忘记了你树的结构。然而,你发现了一张便条,上面记录了在给每条边指定方向后,对于所有满足 $1 \le u, v \le n$ 的有序对 $(u, v)$,节点 $u$ 是否能够到达节点 $v$。

你希望利用便条上的信息,找出树的结构以及每条边的方向。如果有可行解,请构造一种方案。如果存在多组解,你只需输出其中一种即可。

$^{\text{∗}}$ 对于有向图,如果存在一系列节点 $u_1, u_2, \ldots, u_k$,使得 $u_1 = x, u_k = y$,并且对于每个 $2 \le i \le k$,有有向边 $u_{i-1} \rightarrow u_i$ 存在,则称 $x$ 可以到达 $y$。特别地,节点总是可以到达自身。

输入格式

每个测试点包含多个测试用例。第一行包含一个整数 $t$($1 \le t \le 10^4$),表示测试用例的数量。

每个测试用例的第一行包含一个整数 $n$($2 \le n \le 500$),表示树的节点数。

接下来的 $n$ 行,每一行包含一个字符串 $s_i$。$s_i$ 长度为 $n$,只包含 $0$ 和 $1$。若 $s_i$ 的第 $j$ 个字符为 $1$,表示在所有边定向后,节点 $i$ 能到达节点 $j$。

保证所有测试用例满足 $\sum n^3 \le 500^3$。

输出格式

对于每个测试用例,如果存在可行的方案,输出 $\texttt{Yes}$,否则输出 $\texttt{No}$。如果答案是 $\texttt{Yes}$,在随后的 $n-1$ 行中描述你构造的树边。

输出 $n-1$ 行,每行两个整数 $x$ 和 $y$,表示存在一条有向边 $x\rightarrow y$。如果存在多组答案,输出任意一种均可。

可以使用任意大小写输出答案,如 "yEs", "yes", "Yes", "YES" 都被认为是肯定的回答。

输入输出样例

输入 #1
11
4
1000
1111
1010
0001
4
1111
0111
0010
0111
4
0011
0111
0011
0001
4
1000
0110
0010
1111
4
1000
0110
1010
1111
5
10000
01011
00111
00010
00001
5
10000
11000
10101
10111
00001
5
10000
01101
00100
01110
10001
4
1100
0100
0011
0001
4
1110
0100
0010
0101
3
100
111
101
输出 #1
Yes
2 3
2 4
3 1
No
No
Yes
2 3
4 1
4 2
No
No
Yes
2 1
3 1
3 5
4 3
No
No
Yes
1 2
1 3
4 2
Yes
2 3
3 1

说明/提示

对于第一个测试用例,节点 $1$ 和 $4$ 只能到达自身,节点 $2$ 可以到达所有节点,节点 $3$ 只能到达节点 $1$ 和 $3$。所构造的边满足该约束。

对于第二个测试用例,可以证明不存在可行方案。
上一题 去做题 下一题