CF1146C.Tree Diameter

普及+/提高

通过率:0%

时间限制:4.00s

内存限制:256MB

AC君温馨提醒

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

题目描述

There is a weighted tree with nn nodes and n−1n-1 edges. The nodes are conveniently labeled from 11 to nn. The weights are positive integers at most 100100. Define the distance between two nodes to be the sum of edges on the unique path between the nodes. You would like to find the diameter of the tree. Diameter is the maximum distance between a pair of nodes.

Unfortunately, the tree isn't given to you, but you can ask some questions about it. In one question, you can specify two nonempty disjoint sets of nodes pp and qq, and the judge will return the maximum distance between a node in pp and a node in qq. In the words, maximum distance between xx and yy, where x∈px \in p and y∈qy \in q. After asking not more than 99 questions, you must report the maximum distance between any pair of nodes.

Interaction

Each test contains multiple test cases. The first line contains the number of test cases tt (1≤t≤1 0001 \le t \le 1\,000). Description of the test cases follows.

The first line of each test case contains an integer nn (2≤n≤1002 \leq n \leq 100) — the number of nodes in the tree.

To ask a question, print "k1 k2 a1 a2 … ak1 b1 b2 … bk2k_1\ k_2\ a_1\ a_2\ \ldots\ a_{k_1}\ b_1\ b_2\ \ldots\ b_{k_2}" (k1,k2≥1(k_1, k_2 \geq 1 and k1+k2≤nk_1+k_2 \leq n). These two sets must be nonempty and disjoint. The judge will respond with a single integer max⁡p,qdist(ap,bq)\max_{p,q} dist(a_p, b_q). If you ever get a result of −1-1 (because you printed an invalid query), exit immediately to avoid getting other verdicts.

After printing a query do not forget to output end of line and flush the output. Otherwise, you will get Idleness limit exceeded. To do this, use:

  • fflush(stdout) or cout.flush() in C++;
  • System.out.flush() in Java;
  • flush(output) in Pascal;
  • stdout.flush() in Python;
  • see documentation for other languages.

When you are ready to answer, print "−1 d-1\ d", where dd is the maximum shortest distance over all pairs of nodes.

You can only ask at most 99 questions per test case.

Hack Format

To hack, use the following format. Note that you can only hack with one test case.

The first line should contain a single integer tt (t=1t=1).

The second line should contain a single integer nn (2≤n≤1002 \leq n \leq 100).

Each of the next n−1n-1 lines should contain three integers ai,bi,cia_i, b_i, c_i (1≤ai,bi≤n1\leq a_i, b_i\leq n, 1≤ci≤1001 \leq c_i \leq 100). This denotes an undirected edge between nodes aia_i and bib_i with weight cic_i. These edges must form a tree.

有一棵带权树,包含 nn 个节点和 n−1n-1 条边。节点被方便地标号为 11 到 nn。边权为不超过 100100 的正整数。定义两个节点之间的距离为连接这两个节点的唯一路径上所有边的权值之和。你需要求出该树的直径,即所有节点对之间距离的最大值。

不幸的是,这棵树并未直接给出,但你可以向交互系统提出若干问题来获取信息。每次提问时,你可以指定两个非空且互不相交的节点集合 pp 和 qq,评测机会返回一个节点 x∈px \in p 与一个节点 y∈qy \in q 之间的最大距离(即 max⁡x∈p, y∈qdist(x,y)\max_{x \in p,\, y \in q} \mathrm{dist}(x, y))。在至多 99 次提问之后,你必须报告所有节点对之间的最大距离。

交互方式

每个测试包含多个测试用例。第一行包含测试用例数量 tt(1≤t≤1 0001 \le t \le 1\,000)。随后是各测试用例的描述。

每个测试用例的第一行包含一个整数 nn(2≤n≤1002 \leq n \leq 100),表示树中节点的数量。

要提出一个问题,请输出格式为:
$k_1\ k_2\ a_1\ a_2\ \ldots\ a_{k_1}\ b_1\ b_2\ \ldots\ b_{k_2}$
其中 k1,k2≥1k_1, k_2 \geq 1 且 k1+k2≤nk_1 + k_2 \leq n。这两个集合必须非空且互不相交。评测机将返回一个整数:max⁡p,qdist(ap,bq)\max_{p,q} \mathrm{dist}(a_p, b_q)。若你输出了非法查询并得到结果 −1-1,请立即退出程序,以免收到其他错误提示。

每次输出查询后,务必输出换行符并刷新输出缓冲区;否则你会收到“Idleness limit exceeded”(空闲超时)判据。为此,请使用以下方式:

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

当你准备好回答时,请输出 -1 d,其中 dd 是所有节点对之间的最大距离。

每个测试用例最多只能提出 99 次询问。

Hack 格式

用于 Hack 的输入格式如下(注意:你只能对单个测试用例进行 Hack):

第一行应为一个整数 tt(t=1t = 1)。

第二行应为一个整数 nn(2≤n≤1002 \leq n \leq 100)。

接下来的 n−1n-1 行,每行包含三个整数 ai,bi,cia_i, b_i, c_i(1≤ai,bi≤n1 \leq a_i, b_i \leq n,1≤ci≤1001 \leq c_i \leq 100),表示节点 aia_i 与 bib_i 之间存在一条权重为 cic_i 的无向边。这些边必须构成一棵树。

输入输出样例

  • 输入#1

    2
    5
    9
    6
    10
    9
    10
    2
    99

    输出#1

    1 4 1 2 3 4 5
    1 4 2 3 4 5 1
    1 4 3 4 5 1 2
    1 4 4 5 1 2 3
    1 4 5 1 2 3 4
    -1 10
    1 1 1 2
    -1 99

说明/提示

In the first example, the first tree looks as follows:

In the first question, we have p=1p = {1}, and q=2,3,4,5q = {2, 3, 4, 5}. The maximum distance between a node in pp and a node in qq is 99 (the distance between nodes 11 and 55).

The second tree is a tree with two nodes with an edge with weight 9999 between them.

在第一个例子中,第一棵树如下所示:

在第一个问题中,我们有 p={1}p = \{1\},且 q={2,3,4,5}q = \{2, 3, 4, 5\}。pp 中节点与 qq 中节点之间的最大距离为 99(即节点 11 与节点 55 之间的距离)。

第二棵树是一棵仅含两个节点的树,两节点之间有一条权值为 9999 的边。

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

首页