该比赛已结束,您无法在比赛模式下递交该题目。您可以点击“在题库中打开”以普通模式查看和递交本题。

云小安的系统

此题仅允许使用 C++ 语言提交。

题目背景

跨年夜的灯会布线是一棵树。云小安设计的系统里藏着两盏故障灯 sts\neq t,它们会在 00 点前熄灭。你看不到它们的编号,但你有一台“回声指引器”。

你对任意节点 xx 发起一次探测,指引器会分别给出“从 xx 出发,朝着 ss 走的第一步”和“从 xx 出发,朝着 tt 走的第一步”。但为了防止你区分哪一步对应哪盏灯,指引器会把这两步排序后返回。

你需要在有限探测次数内找出 s,ts,t

题目描述

本题为函数交互题

存在一棵无向树 TT,节点编号为 1n1\dots nTT 连通且无环。

存在两个互不相同的隐藏节点 sts\neq t

对任意节点 xx 与目标 y{s,t}y\in\{s,t\},定义:

  • x=yx=y,则 step(x,y)=x\mathrm{step}(x,y)=x
  • 否则 step(x,y)\mathrm{step}(x,y)xx 的一个邻点,且位于从 xxyy 的唯一路径上(即从 xxyy 走的第一步)。

一次询问 query(x) 会返回两个整数 aba\le b,满足:

$$\{a,b\}=\{\mathrm{step}(x,s),\ \mathrm{step}(x,t)\}. $$

注意返回的是排序后的结果,因此你无法知道哪一个对应 ss、哪一个对应 tt

你的任务是在询问次数限制内,输出这两个隐藏节点 s,ts,t(顺序任意)。

交互库与接口说明

你可以调用 light.h 进行交互,交互命令有以下四种。

int getn()

返回整数 nn,满足:

  • 2n21052 \le n \le 2\cdot 10^5

你应当在程序一开始调用此函数,并且仅调用一次

void geted(int i, int &u, int &v)

获取树的第 ii 条边(1in11\le i\le n-1),返回该边两端点 u,vu,v

  • 保证 1u,vn1\le u,v\le nuvu\neq v

void query(int x, int &a, int &b)

询问节点 xx(要求 1xn1\le x\le n),返回两个整数 a,ba,b(按从小到大排序,即保证 aba\le b),满足:

$$\{a,b\}=\{\mathrm{step}(x,s),\ \mathrm{step}(x,t)\}. $$

你最多可以调用 query QQ 次,其中:

$$Q = 3\cdot \left\lceil \log_2 n \right\rceil + 20. $$

超过次数将被判定为错误(RE/WA)。

void submit(int s, int t)

当你确定故障灯位置后,调用此函数提交答案。

要求:

  • 1s,tn1\le s,t\le n
  • sts\neq t

允许输出顺序任意:submit(s,t)submit(t,s) 等价。

提交后你不应当再进行任何交互操作。

数据范围

对于 15%15\% 的数据,满足 n2000n\le 2000

对于另 25%25\% 的数据,满足 n5×104n\le 5\times 10^4

对于 100%100\% 的数据,满足 n2×105n\le 2\times 10^5

对所有测试点:询问次数上限均为 Q=3log2n+20Q=3\lceil\log_2 n\rceil+20

交互库请从 附件 下载,不保证其实现一定与评测时采用的交互库相同。

Hello 2026 New Year Contest (Div. 2)

未参加
状态
已结束
规则
IOI
题目
7
开始于
2025-12-30 18:00
结束于
2026-1-6 18:00
持续时间
4 小时
主持人
参赛人数
16