QOJ.ac

QOJ

実行時間制限: 3 s メモリ制限: 1024 MB 満点: 100 コミュニケーション ハック可能 ✓

#18294. 橋樑建設計畫

統計

這是一個互動式問題。

在 KSA 星球上有 $N$ 個島嶼。島嶼編號為 $1$ 到 $N$,島嶼 $i$ 擁有 $w_i$ 數量的資源。沒有兩個不同的島嶼擁有相同數量的資源。島嶼之間有 $N-1$ 條雙向水下通道,且保證任意兩個島嶼之間僅透過水下通道即可互相抵達。換句話說,由島嶼和水下通道組成的結構是一棵樹。

在意識到 KSA 星球上的水下通道從其他星球無法被看見後,KSA 的國王 Alice 計畫額外建造 $N-1$ 條連接島嶼對的雙向地面橋樑。僅使用這些橋樑,也必須能夠在任意兩個島嶼之間通行。也就是說,橋樑結構也必須構成一棵樹。

當 Alice 完成橋樑建設後,Automata 星球的國王 Bob 開始嘗試挖掘資訊。此時,島嶼編號會被任意重新分配,從那時起,Bob 觀察或使用的每個島嶼編號都遵循此重新分配後的編號系統。

Bob 必須僅透過觀察 Alice 建造的地面橋樑來確定所有 $1 \le i, j \le N$ 的 $x(i, j)$,其中:

$x(i, j) = $ 在僅使用水下通道時,從島嶼編號 $i$ 到島嶼編號 $j$ 的唯一簡單路徑上,擁有最大資源量的島嶼編號。

這裡,起始島嶼編號 $i$、目標島嶼編號 $j$ 以及擁有最大資源量的島嶼編號,皆基於重新分配後的編號系統。從島嶼編號 $i$ 到島嶼編號 $j$ 的路徑包含島嶼編號 $i$ 和島嶼編號 $j$ 本身。

在確定所有 $x(i, j)$ 的值之前,Bob 最多可以詢問以下問題 $100$ 次以獲取額外資訊:

  • `?` $i$ $j$ :$x(i, j)$ 是多少?

由於星際通訊非常昂貴,詢問次數越少,得分越高。

您的程式在每個評測資料中會被執行兩次。在第一次執行時,它必須扮演 Alice 的角色;在第二次執行時,它必須扮演 Bob 的角色。

第一行包含一個整數 $S$,表示執行步驟。$S=1$ 表示扮演 Alice,$S=2$ 表示扮演 Bob。

Alice 的角色

輸入格式:輸入包含一個或多個測試案例。第二行包含測試案例數量 $T$。每個測試案例的格式如下:

第一行包含島嶼數量 $N$。

第二行包含 $N$ 個以空格分隔的整數 $w_1, w_2, \cdots, w_N$。

接下來的 $N-1$ 行,每行包含兩個以空格分隔的整數 $u, v$,表示水下通道的兩個端點。

輸出格式:輸出 $N-1$ 行,每行包含兩個以空格分隔的整數 $u, v$,表示要建造的地面橋樑的兩個端點。列印橋樑的順序不重要,每條橋樑中兩個端點的順序也不重要。

Bob 的角色

互動:輸入包含一個或多個測試案例。第二行包含測試案例數量 $T$。每個測試案例的格式如下:

第一行包含島嶼數量 $N$。

接下來的 $N-1$ 行,每行包含兩個以空格分隔的整數 $u, v$,表示 Alice 建造的地面橋樑的兩個端點。請注意,$u$ 和 $v$ 使用的是重新分配後的編號系統,且 Bob 接收到橋樑的順序可能與 Alice 列印的順序不同。

若需額外資訊,當列印以下查詢時,下一行將包含 $x(i, j)$ 的值。此查詢每個測試案例最多可使用 $100$ 次。

  • `?` $i$ $j$ ($1 \le i, j \le N$)

若要提交答案,請列印 `!` ,然後在接下來的 $N$ 行中列印答案。在 $N$ 行中的第 $i$ 行,必須列印 $x(i, 1), x(i, 2), \cdots, x(i, N)$,並以空格分隔。此查詢不計入詢問次數,且對應測試案例的互動在列印後立即結束。

如果某個測試案例的互動結束且不是最後一個測試案例,則必須立即進行下一個測試案例。如果最後一個測試案例的互動結束,程式必須立即終止。

然而,如果在單個測試案例中詢問超過 $100$ 次,查詢的回應將給出 `-1` ,表示超過了允許的詢問次數。在這種情況下,您的程式必須立即終止,結果將被判定為 Wrong Answer。

資料範圍

  • $S \in \{1, 2 \}$
  • $1 \le T \le 100$
  • $2 \le N \le 100$
  • $1 \le u < v \le N$
  • $1 \le w_i \le 10^9$
  • 若 $i \ne j$,則 $w_i \neq w_j$

評分方式

對於每個評測資料,令 $Q$ 為所有測試案例中詢問次數的最大值。該評測資料的得分判定如下:

No. Points Constraints
1 25 $60 < Q \le 100$
2 37 $20 < Q \le 60$
3 50 $4 < Q \le 20$
4 62 $Q = 4$
5 75 $Q = 3$
6 100 $Q \le 2$

您的提交得分為所有評測資料集中的最低得分。然而,如果您未能在問題規定的限制內透過正確的互動列印解決方案,可能會發生意外結果。

範例

輸入格式 1

1
2
4
3 5 9 4
1 2
2 3
2 4



2
10 1
1 2

輸出格式 1

1 4
2 3
3 4



1 2

輸入格式 2

2
2
4
1 3
1 4
2 3

4

1





2
1 2

2

輸出格式 2

? 2 3

? 1 2

!
1 1 1 1
1 2 4 4
1 4 3 4
1 4 4 4


? 1 2

!
1 2
2 2

Note

在範例 1 中,由於 $S = 1$,您的程式必須扮演 Alice 的角色。

在範例 2 中,由於 $S = 2$,您的程式必須扮演 Bob 的角色。

在第一個測試案例中,第一次執行時的頂點 $1, 2, 3, 4$ 分別被重新分配為頂點 $2, 4, 1, 3$。

在第二個測試案例中,第一次執行時的頂點 $1, 2$ 分別被重新分配為頂點 $2, 1$。

您必須在列印內容後立即刷新輸出。若要刷新,可以使用:

  • C --- `fflush(stdout)`
  • C++ --- `std::cout.flush()`
  • Python --- `sys.stdout.flush()`
  • Java --- `System.out.flush()`
  • 其他語言請參閱相關文件。

此外,請注意範例輸入和輸出中的空行僅為了清晰起見,在實際互動中不會出現。

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.