#P7595. 「EZEC-8」猜树
「EZEC-8」猜树
题目背景
这是一道交互题。
题目描述
有一棵以 为根的 个点的有根树,您需要通过若干次询问得到这棵树的结构。
您可以使用两种询问:
? 1 u v
通过这种询问,您可以获得 和 之间的距离。? 2 u
通过这种询问,您可以获得 子树的大小和 子树中的所有节点。
请通过使交互库输出不超过 个数,得到这棵树的结构。
交互方式
输入树的大小 以开始交互。
交互过程中,您可以进行题目描述中的两种询问。
对于第一种询问,交互库将会返回一个非负整数,表示 节点和 节点间的距离。
对于第二种询问,交互库将会先返回一个正整数 ,表示 子树的大小。接下来会在同一行中返回 个正整数,表示 子树中的所有节点(节点顺序会被打乱)。
在您确定答案后,请以 ! fa[2] fa[3] ... fa[n]
的形式输出一行,停止交互。其中 表示这棵树中 号节点的父节点。
在您输出一行后,请清空缓冲区:
- 在 C++ 中,使用
fflush(stdout)
或cout.flush()
。 - 在 Pascal 中,使用
flush(output)
。 - 在 Python 中,使用
stdout.flush()
。 - 其它语言请自行查阅文档。
输入格式
见「交互方式」。
输出格式
见「交互方式」。
5
1
5 1 5 2 4 3
3 4 2 5
1 3
? 1 1 2
? 2 1
? 2 2
? 2 3
! 1 1 2 2
提示
本题采用捆绑测试。
- Subtask 1(5 points):。
- Subtask 2(15 points):。
- Subtask 3(20 points):。
- Subtask 4(15 points):树是一条链。
- Subtask 5(15 points):树是一棵完全二叉树。
- Subtask 6(30 points):无特殊限制。
对于 的数据:,。
注意:询问不合法或交互库输出数超过 后继续询问可能导致 TLE。