#P12447. [COTS 2025] 砍树 / Stablo

    ID: 12280 Type: RemoteJudge 3000ms 512MiB Tried: 0 Accepted: 0 Difficulty: 6 Uploaded By: Tags>2025交互题Special Judge分治Ad-hocCOI(克罗地亚)

[COTS 2025] 砍树 / Stablo

题目描述

这是一道交互题。本题中,交互库是非自适应的。

有一棵 NN 个节点的树。这棵树中,每个节点度数至多为 33

你可以提问至多 K=2.5×105K=2.5\times 10^5 次。每次给定三个两两不同的节点 a,b,ca,b,c,交互库会回答:

  • 0\text{0},如果 dist(a,b)=dist(a,c)\operatorname{dist}(a,b)=\operatorname{dist}(a,c);
  • 1\text{1},如果 $\operatorname{dist}(a,b)\lt\operatorname{dist}(a,c)$;
  • 2\text{2},如果 $\operatorname{dist}(a,b)\gt\operatorname{dist}(a,c)$。

定义 dist(u,v)\operatorname{dist}(u,v) 表示 u,vu,v 最短路上边的数量。

试通过询问还原这棵树。

虽然你可以提问 K=2.5×105K=2.5\times 10^5 次,但是想要获得更高的分数,需要更少的询问次数。见「计分方式」。

实现细节

首先读入正整数 NN。读入后发起询问:

  • ?\texttt{?} aa bb cc:发起一次询问。
    • 你需要保证 1a,b,cN1 \leq a, b, c \leq Naba \neq bbcb \neq ccac \neq a
    • 最多可以询问 2.5×1052.5\times 10^5 次。
    • 从标准输入流读入一个整数表示答案,具体见「题目描述」。
  • !\texttt{!}:报告答案。
    • 输出 !\texttt{!} 后,接下来再输出 (N1)(N-1) 行,每行两个正整数,描述一条树边。
    • 你可以以任意顺序输出这 (N1)(N-1) 条边。
    • 报告答案后,你的程序必须终止运行。

每次提问后,都需要换行并刷新缓冲区。

交互库是非自适应的。也就是说,树的形态在交互开始前已经固定。

输入格式

见「实现细节」。

输出格式

见「实现细节」。

4

1

2

0





? 1 2 3

? 1 4 3

? 2 1 3

!
1 2
2 3
3 4

提示

样例解释

样例中,树边有 {(1,2),(2,3),(3,4)}\{(1,2),(2,3),(3,4)\}

数据范围

  • N<512N\lt 512
  • 每个节点度数至多为 33

子任务

  • Subtask 0 (0 pts)\text{Subtask 0 (0 pts)}:样例。
  • Subtask 1 (10 pts)\text{Subtask 1 (10 pts)}:每个节点度数至多为 22
  • Subtask 2 (20 pts)\text{Subtask 2 (20 pts)}:树是满二叉树。
    • 换句话说,树是完全二叉树,且存在正整数 kk 使得 N=2k1N=2^k-1
  • Subtask 3 (70 pts)\text{Subtask 3 (70 pts)}:无额外限制。

计分方式

答案错误,询问次数超限,或者出现了任何未能成功运行结束的情况,得 00 分。

假设你在某个分值为 BB 的子任务中至多用了 KK 次查询,则子任务得分为

$$\min\left(1, \left(\frac{14000}{K}\right)^{0.7}\right) \cdot B $$

交互库是非自适应的。也就是说,树的形态在交互开始前已经固定。