#H1040. find a hidden chain
find a hidden chain
题目描述
这是一道交互题。
给定一棵 点的树,树中有一条隐藏的链 。
你可以向评测机提出若干次询问,每次询问格式应如 k x[1] x[2] ... x[k]
表示询问 这 个点中有多少点在链 上。
现在你需要找到这条链,保证 。
注意:你询问的点不能重复。
输入格式
第一行一个整数 。
接着 行,每行两个整数 表示 之间存在一条边。
输出格式
每次询问,你需要向标准输出输出 个数,格式见题面。
在你得出答案之后,你应该输出 ! x y
,表示隐藏的链为 ,顺序不影响得分。
4
1 2
2 3
1 4
3
2
3 2 3 4
2 3 4
! 3 4
数据规模与约定
令 表示交互次数上限。
- ,保证树是一条链。
- ,保证树是菊花图。
程序模板:
#include <bits/stdc++.h>
using namespace std;
int query(vector<int> &a) { // 传入你要询问的点,返回在链上的点的个数
printf("%d", (int)a.size());
for (vector<int>::iterator v = a.begin(); v != a.end(); v++) printf(" %d", *v);
putchar('\n');
fflush(stdout);
int d;
scanf("%d", &d);
return d;
}
int main() {
vector<int> a(2);
a[0]=1; a[1]=2;
int w=query(a),x=-1,y=-1;
if (w==2) x=1,y=2;
printf("! %d %d\n", x, y);
return 0;
}
$\texttt{idea: Lenstar, std: hydd, checker: Lenstar, data: Lenstar}$