CFCF2208D2.Tree Orientation (Hard Version)

提高+/省选-

通过率:0%

AC君温馨提醒

该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

这是该问题的难度较高版本。两个版本的区别在于本版本中 nn 的约束更大。只有在你完成了此问题的所有版本后,才能进行 hack。

你曾经拥有一棵包含 nn 个节点的无向树。为了让这棵树变得更加有趣,你打算随意给每条 n1n-1 条边赋予一个方向。

时光流逝,你已经忘记了你的树的结构。但你发现了一张记录,在所有边被赋予方向后,对于每一组有序对 (u,v)(u,v) 满足 1u,vn1\le u,v\le n,都标记了 uu 是否能够到达 vv

你想根据这份信息,推断出可能的树的结构以及边的方向。如果有可能,请构造出任意一种解;如果有多个解,只需给出其中一种即可。

对于有向图,如果存在一组节点序列 u1,u2,,uku_1,u_2,\ldots,u_k,使得 u1=x,uk=yu_1=x,u_k=y,并且对所有 ii22kk,有有向边 ui1uiu_{i-1}\rightarrow u_i 存在,则称 xx 可以到达 yy。特别地,一个节点总可以到达它自己。

输入格式

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

每个测试用例第一行包含一个整数 nn2n80002\le n\le 8000),表示你的树有 nn 个节点。

接下来的 nn 行,每行包含一个长度为 nn 的字符串 sis_i,仅包含字符 0011。如果第 jj 个字符为 11,表示 ii 能在边定向后到达 jj

保证所有测试用例的 n2n^2 之和不超过 800028000^2

输出格式

对于每个测试用例,如果存在解,输出 Yes\texttt{Yes},否则输出 No\texttt{No}。如果答案是 Yes\texttt{Yes},则在下一行输出你构造的边。

共输出 n1n-1 行,每行两个正整数 xxyy,表示有一条定向后的有向边 xyx\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

说明/提示

对于第一个样例,节点 1144 只能到达自身,节点 22 可以到达所有节点,节点 33 只能到达 1133。所构造的边满足这些约束。

对于第二个样例,可以证明不存在可行解。

首页