#交互#CF1370F2 The Hidden Pair (Hard Version)
分析
考虑询问所有点可以知道两个标记点路径上的一个点,
以该点为根建树,可以二分出离该点较远的一个标记点,
再用这个标记点一次询问推出另一个,最多11次询问
代码
#include <cstdio>
#include <cctype>
#include <cstring>
#include <algorithm>
#include <vector>
#define rr register
using namespace std;
const int N=1011; struct node{int y,next;}e[N<<1]; char S[11];
vector<int>K[N]; int t,n,et,Top,as[N],dep[N],ans1,ans2,len;
inline signed iut(){
rr int ans=0; rr char c=getchar();
while (!isdigit(c)) c=getchar();
while (isdigit(c)) ans=(ans<<3)+(ans<<1)+(c^48),c=getchar();
return ans;
}
inline void dfs(int x,int fa,int Dep){
t=max(t,Dep),K[Dep].push_back(x);
for (rr int i=as[x];i;i=e[i].next)
if (e[i].y!=fa) dfs(e[i].y,x,Dep+1);
}
signed main(){
for (rr int T=iut();T;--T){
n=iut(),et=1,Top=0;
memset(as,0,sizeof(as));
for (rr int i=1;i<n;++i){
rr int x=iut(),y=iut();
e[++et]=(node){y,as[x]},as[x]=et;
e[++et]=(node){x,as[y]},as[y]=et;
}
printf("? %d",n);
for (rr int i=1;i<=n;++i) printf(" %d",i);
putchar(10),fflush(stdout);
ans1=iut(),len=iut(),dfs(ans1,0,0);
rr int l=(len-1)/2+1,r=min(len,t);
while (l<=r){
rr int mid=(l+r)>>1,LEN,SIZ=K[mid].size();
printf("? %d",SIZ);
for (rr int i=0;i<SIZ;++i) printf(" %d",K[mid][i]);
putchar(10),fflush(stdout);
ans2=iut(),LEN=iut();
if (LEN==len) ans1=ans2,l=mid+1;
else r=mid-1;
}
for (rr int i=0;i<=t;++i) K[i].clear(); t=0;
dfs(ans1,0,0);
rr int SIZ=K[len].size();
printf("? %d",SIZ);
for (rr int i=0;i<SIZ;++i) printf(" %d",K[len][i]);
putchar(10),fflush(stdout),ans2=iut(),iut();
for (rr int i=0;i<=t;++i) K[i].clear(); t=0;
printf("! %d %d\n",ans1,ans2);
fflush(stdout),scanf("%s",S+1);
}
return 0;
}
#交互#CF1370F2 The Hidden Pair (Hard Version)的更多相关文章
- CF1370F2-The Hidden Pair(Hard Version)【交互题,二分】
正题 题目链接:https://www.luogu.com.cn/problem/CF1370F2 题目大意 \(T\)组数据,给出\(n\)个点的一棵树,有两个隐藏的关键点.你每次可以询问一个点集, ...
- Solution -「CF 1370F2」The Hidden Pair (Hard Version)
\(\mathcal{Description}\) Link (hard) & Link (easy). 这是一道交互题. 给定一棵 \(n\) 个结点的树,其中有两个是特殊结点. ...
- layui 父子弹窗数据交互(包含子弹窗自己关闭并给父弹窗数据填充)
//父级弹窗 function showAlertOrg() { layui.use('layer', function () { var body; var index = layer.open({ ...
- 利用Netty构建自定义协议的通信
在复杂的网络世界中,各种应用之间通信需要依赖各种各样的协议,比如:HTTP,Telnet,FTP,SMTP等等. 在开发过程中,有时候我们需要构建一些适应自己业务的应用层协议,Netty作为一个非常优 ...
- Python开发入门与实战1-开发环境
1.搭建Python Django开发环境 1.1.Python运行环境安装 Python官网:http://www.python.org/ Python最新源码,二进制文档,新闻资讯等可以在Pyth ...
- 跨平台移动框架iMAG开发入门
iMAG是一个非常简洁高效的移动跨平台开发框架,开发一次能够同一时候兼容Android和iOS平台,有点儿Web开发基础就能非常快上手.当前移动端跨平台开发的框架有非常多,但用iMAG另一个优点,就是 ...
- 可扩展标记语言XML
XML简述 XML用于描述数据,是当前处理结构化文档信息的有力工具.与操作系统编程语言的开发平台无关,可以实现不同系统之间的数据交互. 结构 <?xml version="1.0&qu ...
- Quartz简单实现定时任务管理(SSM+Quartz)
首先你得有一个用Maven搭好的SSM框架,数据库用的Mysql,这里只有关于Quartz的部分.其实有大神总结的很好了,但做完后总有些地方不一样,所以写这篇作为笔记.这里先把大神的写的分享给大家:h ...
- [python] python django web 开发 —— 15分钟送到会用(只能送你到这了)
1.安装python环境 1.1 安装python包管理器: wget https://bootstrap.pypa.io/get-pip.py sudo python get-pip.py 1. ...
- scrapy 基础
安装略过 创建一个项目 scrapy startproject MySpider #或者创建时存储日志scrapy startproject --logfile='../logf.log' MySpi ...
随机推荐
- 【Android 逆向】【攻防世界】ill-intentions
1. apk 安装到手机, 啥输入框都没有 2. apk拖入到jadx中看看 public class MainActivity extends Activity { @Override // and ...
- Lua学习笔记之迭代器、table、模块和包、元表和协程
迭代器 迭代器是一种对象,它能够来遍历标准库模板容器中的部分或全部元素,每个迭代器对象代表容器中确定的地址,在Lua中迭代器是一种支持指针类型的结构,他可以遍历集合的每一个元素. 泛型for迭代器 泛 ...
- eclipse c++ 安装
eclipse及其插件安装 对于我这种被VS惯坏了的人来说,make file 非常不友好的,最近要在redhat 下面去编译c++动态库和应用程序,原有的工程是在window下面的,要到linux下 ...
- 谈一谈如何使用etcd中的事务
本文内容来源于自己学习时所做的记录,主要来源于文章最后的参考链接,如有侵权,请联系删除,谢谢! etcd 是一个 key/value 类型的数据库.既然我们需要存储数据,必然会面临这样一个需求,即希望 ...
- 50条MAUI踩坑记
1. 目录结构: (1)_imports.razor是一个全局using namespace的地方 (2)Platforms下的代码,虽然都放在同一个项目下,但是Platforms\Android下的 ...
- 2022年RPA行业发展十大趋势,六千字长文助你看懂RPA
2022年RPA行业发展十大趋势,六千字长文助你看懂RPA 2022年RPA行业如何发展?十大趋势助你看懂RPA行业未来 这里有2022年RPA行业发展的十大趋势,关注RPA的朋友定要收藏! 文/王吉 ...
- Redis集群Cluster
Redis Cluster 是社区版推出的 Redis 分布式集群解决方案,主要解决 Redis 分布式方面的需求,比如,当遇到单机内存,并发和流量等瓶颈的时候,Redis Cluster 能起到很好 ...
- 一文搞懂Vue的MVVM模式与双向绑定
v-model 是 Vue.js 框架中用于实现双向数据绑定的指令.它充分体现了 MVVM(Model-View-ViewModel)模式中的双向数据绑定特性.下面我们将详细解释 v-model 如何 ...
- ubuntu环境下python下使用OpenCV库读取USB摄像头的画面
一 概念 OpenCV是一个开源的计算机视觉和机器学习软件库.它可以使用pip命令行中的以下命令安装:"pip install opencv-python" 这个做视觉处理,非常的 ...
- 【开源库推荐】#1 SpiderMan 可快速查看Android闪退崩溃日志
原文:https://stars-one.site/2020/12/22/android-log-spiderman 开发Android的时候想必大家都遭受过这种经历: 用户手机上App闪退了,但是我 ...