CF2106G1.Baudelaire (easy version)

提高+/省选-

通过率:0%

AC君温馨提醒

该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

这是该问题的简单版本。两个版本之间的唯一区别在于,在这个版本中,保证每个节点都与节点 11 相邻。

本题是交互题。

波德莱尔非常富有,所以他购买了一棵大小为 nn 的树,这棵树以某个任意节点为根。此外,每个节点的值为 11 或 −1-1。在这个版本中,每个节点都与节点 11 相邻。但请注意,节点 11 不一定是根节点。

书呆子牛看到了这棵树并爱上了它。然而,计算机科学的收入不足以让他买下这棵树。波德莱尔决定和书呆子牛玩一个游戏,如果他赢了,就把这棵树送给他。

书呆子牛不知道哪个节点是根,也不知道节点的值。但他可以向波德莱尔提出两种类型的查询:

  1. 1 k u₁ u₂ ... uₖ:设 f(u)f(u) 为从树的根到节点 uu 的路径上所有节点的值之和。书呆子牛可以选择一个整数 kk(1≤k≤n1 \le k \le n)和 kk 个节点 u1,u2,...,uku_1, u_2, ..., u_k,然后他会收到值 f(u1)+f(u2)+...+f(uk)f(u_1) + f(u_2) + ... + f(u_k)。
  2. 2 u:波德莱尔将切换节点 uu 的值。具体来说,如果 uu 的值为 11,则变为 −1-1,反之亦然。

如果书呆子牛在总共 n+200n + 200 次查询内正确猜出每个节点的值(即执行查询后树的最终值),他就获胜。你能帮助他获胜吗?

输入格式

输入的第一行包含一个整数 tt(1≤t≤1001 \le t \le 100),表示测试用例的数量。

每个测试用例的第一行包含一个整数 nn(2≤n≤1032 \le n \le 10^3),表示树的大小。

接下来的 n−1n-1 行每行包含两个整数 uu 和 vv(1≤u,v≤n1 \le u, v \le n,u≠vu \neq v),表示树中节点 uu 和 vv 之间有一条边。在这个版本中,保证 u=1u = 1 或 v=1v = 1。

保证所有测试用例的 nn 之和不超过 10310^3,并且每个输入的图都是合法的树。

输出格式

要提出类型 11 的查询,请按以下格式输出一行(不带引号):

  • ? 1 k u₁ u₂ ... uₖ(1≤k,ui≤n1 \le k, u_i \le n)

评测机将返回一个整数,即 f(u1)+f(u2)+...+f(uk)f(u_1) + f(u_2) + ... + f(u_k)。

要提出类型 22 的查询,请按以下格式输出一行:

  • ? 2 u(1≤u≤n1 \le u \le n)

评测机会切换节点 uu 的值:如果其值为 11,则变为 −1-1,反之亦然。

当你找到答案时,请按以下格式输出一行:

  • ! v₁ v₂ ... vₙ(vi=1v_i = 1 或 vi=−1v_i = -1,viv_i 是执行查询后节点 ii 的值)

之后,继续处理下一个测试用例,或者如果是最后一个测试用例则终止程序。输出答案不计入查询次数。

交互器不是自适应的,这意味着树的值在参与者提出查询之前就已经确定。

如果你的程序进行了超过 n+200n + 200 次查询,它应立即终止并收到 Wrong Answer 的判定。否则,你可能会得到任意判定,因为你的解决方案将继续从已关闭的流中读取数据。

在打印查询后,不要忘记输出换行符并刷新输出缓冲区。否则,你可能会得到 Idleness Limit Exceeded 的判定。可以使用以下方法刷新输出:

  • C++:fflush(stdout) 或 cout.flush()
  • Java:System.out.flush()
  • Pascal:flush(output)
  • Python:stdout.flush()
  • 其他语言请参考相关文档。

Hack 格式

对于 Hack 攻击,请使用以下格式:

第一行应包含一个整数 tt(1≤t≤1001 \le t \le 100)——测试用例的数量。

每个测试用例的第一行必须包含两个整数 nn 和 rootroot(2≤n≤1032 \le n \le 10^3,1≤root≤n1 \le root \le n)——树的大小和树的根节点。

每个测试用例的第二行必须包含 nn 个整数 a1,a2,...,ana_1, a_2, ..., a_n(∣ai∣=1|a_i| = 1)——其中 aia_i 是节点 ii 的值。

接下来的 n−1n-1 行每行必须包含两个整数 uu 和 vv(1≤u,v≤n1 \le u, v \le n)——表示节点 uu 和 vv 之间有一条边。

所有测试用例的 nn 之和不得超过 10310^3,并且每个输入的图必须是合法的树。对于此版本,每个节点必须与节点 11 相邻。

输入输出样例

  • 输入#1

    1
    4
    1 2
    3 1
    1 4
    
    0
    
    
    -6

    输出#1

    ? 1 3 1 2 3
    
    ? 2 2
    ? 1 3 1 2 3
    
    ! -1 -1 -1 1

说明/提示

在示例中,树的根是节点 22,节点的初始值为 [−1,1,−1,1][-1, 1, -1, 1]。因此,f(1)=0f(1) = 0,f(2)=1f(2) = 1,f(3)=−1f(3) = -1,f(4)=1f(4) = 1。

首先,我们查询 f(1)+f(2)+f(3)f(1) + f(2) + f(3) 的和,得到 00。然后,我们切换节点 22 的值,此时节点的值变为 [−1,−1,−1,1][-1, -1, -1, 1]。因此,f(1)=−2f(1) = -2,f(2)=−1f(2) = -1,f(3)=−3f(3) = -3,f(4)=−1f(4) = -1,f(1)+f(2)+f(3)=−6f(1) + f(2) + f(3) = -6。

最终,我们推断出节点的值为 [−1,−1,−1,1][-1, -1, -1, 1],并输出该结果。

注意,这只是一个解释查询如何工作的示例,并不涉及具体的解题策略。

翻译由 DeepSeek V3 完成

输入解题思路,AI测评打分。不知道怎么写?

首页