题目译自 JOISC 2017 Day3 T3「自然公園 / Natural Park」
JOI 岛是一个观光胜地,全岛被定为一个自然公园。
JOI 岛有 $N$ 个广场和若干条道路。广场从 $0$ 至 $N - 1$ 编号。每条道路联结岛内两个不同的广场,可以双向通行。对于每一个广场,至多有 $7$ 条道路将它与其他广场相连。对于任意两个不同的广场,至多有 $1$ 条道路将它们相连。此外,我们已知任意两个广场都可以通过若干条道路互相到达。
你和你的朋友 IOI 酱决定考察 JOI 岛。为了考察能够高效进行,你不得不掌握全岛的结构。岛上的诸多动物会带来危险,因此由运动细胞发达的 IOI 酱去探索全岛,而你则负责基于 IOI 酱的报告来确定岛的结构。
你可以对 IOI 酱指定两个广场 $A$、$B$,以及若干可以经过的广场,向其询问是否可以只经由指定的广场从 $A$ 到达 $B$。IOI 酱会按照询问的内容在岛上探索并报告结果。
由于考察不能持续过长时间,需要将询问次数限制在 $45\,000$ 次以内。
请编写一个程序与 IOI 酱交流并确定 JOI 岛的完整结构。
你需要实现一个过程来确定岛的结构。请包含头文件 park.h。
程序需要实现以下过程。
void Detect(int T, int N)程序中需要调用以下函数来输出所确定的 JOI 岛的构造。
void Answer(int A, int B)此外,程序中可以调用如下函数。
int Ask(int A, int B, int Place[])函数 $\texttt{Detect}$ 结束时,若存在未被作为过函数 $\texttt{Answer}$ 调用参数的道路,被判为 Wrong Answer [6]。
为了内部使用而定义的其他函数及全局变量不作限制。但是,你的提交不应该向标准输入/输出或者其他文件进行任何读写操作。
「附加文件」中提供了 park.h、grader.c 和 grader.cpp 三个文件。若你编写的程序名称为 park.c 或 park.cpp,请运行以下命令来编译:
* C 语言 gcc -std=c11 -O2 -o grader grader.c park.c -lm
* C++ 语言 g++ -std=c++14 -O2 -o grader grader.cpp park.cpp
当命令成功时,会产生一个可执行文件 grader。
注意实际评测时的程序与下发的样例评测程序并不相同。实际的 park.h 函数实现将通过标准输入/输出与单独运行的交互器进行交互。
样例评测程序将从标准输入读入以下数据。
样例评测程序将向标准输出输出以下信息。
Accepted;Wrong Answer [x] 的格式报告并退出。程序执行过程中违反了多种限制时,只会报告其中的一种。
所有数据满足下列条件。$T$,$N$,$M$ 的含义参照「样例评测程序输入格式」一节。 * $1 \leq T \leq 5$。 * $2 \leq N \leq 1\,400$。 * $1 \leq M \leq 1\,500$。 * 对于任意一个广场,至多有 $7$ 条道路将它与其他广场联结。 * 对于任意两个不同广场,可以通过若干道路互相到达。 * 对于任意两个不同广场,联结它们的道路至多有 $1$ 条。
子任务数据满足下列条件。