CF1129E Legendary Tree

题目描述

这是一个交互题。 一棵传说中的树静静地矗立在森林深处。传说中,能够识破这棵树的人将永远成为传说中的宗师。 为了帮助你确定这棵树,女神 Mikaela 向你透露,这棵树包含 $n$ 个顶点,编号从 $1$ 到 $n$。她还允许你向她提出如下问题。对于每个问题,你需要告诉 Mikaela 两个不相交且非空的顶点集合 $S$ 和 $T$,以及你喜欢的任意一个顶点 $v$。然后,Mikaela 会统计并告诉你有多少对顶点 $(s, t)$ 满足 $s \in S$ 且 $t \in T$,并且从 $s$ 到 $t$ 的简单路径经过 $v$。 女神 Mikaela 很忙,她最多只会回答你 $11\,111$ 个问题。 这是你唯一的机会。你的任务是确定这棵树,并报告它的所有边。

输入格式

第一行包含一个整数 $n$($2 \leq n \leq 500$),表示树的顶点数。

输出格式

当你确定了树并准备报告所有边时,单独输出一行 "ANSWER"(全部大写字母)。 接下来输出 $n-1$ 行,每行包含两个用空格分隔的整数,表示一条边的两个端点。每条边只需报告一次。输出完毕后,程序应立即终止。 ## 交互说明 每当你想要询问一个问题时,请按如下方式与评测机交互: 1. 首先输出 $S$ 的大小,单独占一行。下一行输出 $|S|$ 个用空格分隔的不同整数,表示 $S$ 中的顶点。 2. 同理,输出 $T$ 的大小,单独占一行。下一行输出 $|T|$ 个用空格分隔的不同整数,表示 $T$ 中的顶点。 3. 最后一行输出你选择的顶点 $v$。 4. 然后从输入中读取 Mikaela 的回答。 请注意,$S$ 和 $T$ 必须是不相交且非空的集合。 每次输出询问后不要忘记输出换行并刷新输出缓冲区,否则会收到 Idleness limit exceeded 的判罚。具体做法如下: - C++ 使用 fflush(stdout) 或 cout.flush(); - Java 使用 System.out.flush(); - Pascal 使用 flush(output); - Python 使用 stdout.flush(); - 其它语言请查阅相关文档。 如果你的程序询问次数过多、询问不合法,或未正确遵循交互规范,可能会收到任意判罚。否则,如果你报告的树不正确,将收到 Wrong Answer 判罚。 请注意,树的结构在交互开始前就已确定,不会因你的询问而改变。 ## Hack 格式 Hack 数据格式如下: 第一行包含一个整数 $n$($2 \leq n \leq 500$),表示树的顶点数。 接下来的 $n-1$ 行,每行包含两个用空格分隔的整数 $u$ 和 $v$,表示存在一条无向边 $(u, v)$($1 \leq u, v \leq n$)。

说明/提示

在样例中,树的结构如下: ![](https://cdn.luogu.com.cn/upload/vjudge_pic/CF1129E/3e95ead99a2c2448b4f1f57329ce10f7001f546b.png) 程序获得 $n = 5$。然后程序向 Mikaela 询问 $S = \{1, 2, 3\}$,$T = \{4, 5\}$,$v = 2$,Mikaela 回答 $5$(满足条件的 $(s, t)$ 对有 $(1, 4)$、$(1, 5)$、$(2, 4)$、$(2, 5)$、$(3, 5)$)。 由 ChatGPT 4.1 翻译