CF2208D1 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$ 和 $4$ 只能到达自身,节点 $2$ 可以到达所有节点,节点 $3$ 只能到达节点 $1$ 和 $3$。所构造的边满足该约束。
对于第二个测试用例,可以证明不存在可行方案。
由 ChatGPT 5 翻译