QOJ.ac

QOJ

时间限制: 1.0 s 内存限制: 1024 MB 总分: 100 交互 可 Hack ✓

#15314. Menji,我哋好掛住你!

统计

呢題係互動題。

Menji 盪失咗路,大家都好掛住佢。你嘅任務係搵返佢出嚟!

有一棵由 $n$ 個節點組成嘅二元樹 $T$,樹 $T$ 嘅每條邊長度都係 $1$。Menji 匿埋喺節點 $X$。你知道呢棵樹嘅結構,但係你唔知 $X$ 係邊個節點。

為咗搵出 $X$,你可以發送信號。你可以揀一個節點 $u$ 同埋一個信號強度 $k$,然後由節點 $u$ 發送一個強度為 $k$ 嘅信號。如果 $u$ 同 $X$ 之間嘅距離唔超過 $k$,Menji 就會收到呢個信號並傳返一個信號畀你,你就會收到信號。否則,你乜嘢都唔會收到。

發送信號好慢,而你好趕時間,所以請喺唔超過 $40$ 次信號發送之內確定 Menji 嘅位置。

互動協議

輸入包含多組測試資料。輸入嘅第一行包含一個整數 $T$($1 \le T \le 100$),代表測試資料嘅組數。

對於每組測試資料,第一行包含一個整數 $n$($2 \le n \le 3 \times 10^4$),代表樹入面嘅節點數量。

第二行包含 $n - 1$ 個整數 $fa_2, fa_3, \dots, fa_n$($1 \le fa_i < i$),其中 $fa_i$ 係節點 $i$ 喺樹上面嘅父節點。棵樹以節點 $1$ 為根。

保證呢棵樹係一棵二元樹,即係唔存在 $1 < i < j < k \le n$ 令到 $fa_i = fa_j = fa_k$。

要發送信號,請按以下格式印出單一行:

  • ? u k:代表你喺節點 $u$ 產生一個強度為 $k$ 嘅信號。你需要確保 $1 \le u \le n, 0 \le k \le n$。之後你需要讀入一個整數 $o$($o \in \{0, 1\}$)。如果你收到信號(等價於 $dis(u, X) \le k$),則 $o = 1$,否則 $o = 0$。

要報告答案,請按以下格式印出單一行:

  • ! u:代表你已經搵到 $X = u$。印出呢行之後,你需要繼續處理下一組測試資料;如果冇更多測試資料,就結束程式。

對於每組測試資料,你最多可以發送 $40$ 次信號。報告答案唔計入發送信號嘅次數。

如果你發送咗超過 $40$ 次信號,或者你發送嘅信號格式唔啱,又或者你報告嘅答案唔正確,互動就會結束,而你會收到 Wrong answer 判定。

請注意,互動器係自適應嘅(adaptive),即係話只要同限制條件以及之前查詢嘅回答保持一致,答案可能會根據你嘅查詢而改變。

保證所有測試資料嘅 $n$ 總和唔超過 $3 \times 10^4$。

印出每一行之後,千祈唔好忘記輸出換行符並刷新輸出緩衝區。喺 C++ 入面可以用 fflush(stdout) 或者 cout.flush(),Java 可以用 System.out.flush(),而 Python 可以用 stdout.flush() 嚟刷新輸出流。

範例

範例輸入 1

2
7
1 1 2 2 3 3

1

0

0

7
1 1 2 2 3 3

0

1

範例輸出 1

? 2 1

? 3 2

? 4 0

! 5

? 2 1

? 3 0

! 3

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.