「杂题乱刷2」CF1370F2

news/2024/11/13 12:47:20/文章来源:https://www.cnblogs.com/wangmarui/p/18538664

题目链接

CF1370F2 The Hidden Pair (Hard Version) (*2700)

题目描述

真的很难吗?

我们首先考虑找出第一个特殊点。

我们可以先求出这两个点路径中的任意一个点。发现询问 \(1 \sim n\) 就使我们需要的询问、

接下来以这个路径中的一个点为根来确定每个节点的深度。

接下来考虑二分出两个特殊点的路径中最深的点,容易发现这个东西是有单调性的。

我们找到一个点后,我们发现这个点就是路径的边界,那么我们就可以以找到的这个特殊点为根来根据我们的第一次询问确定另一个特殊点的深度。

这样就能找到两个特殊点了。

询问次数为 \(12\) 次,可以通过 F1。

我们继续考虑优化二分的边界。

假设这条路径为 \(dis\),根节点深度为 \(1\),那么最深的那个节点深度至少为 \(\lceil \frac{dis}{2} \rceil\),至多为 \(dis + 1\)

那么我们就将二分次数减少了 \(1\) 次。

此时总共询问 \(11\) 次,可以通过 F2。

参考代码

#include<bits/stdc++.h>
using namespace std;
//#define map unordered_map
#define re register
#define ll long long
#define forl(i,a,b) for(re ll (i)=(a);i<=(b);(i)++)
#define forr(i,a,b) for(re ll (i)=(a);i>=(b);(i)--)
#define forll(i,a,b,c) for(re ll (i)=(a);i<=(b);(i)+=(c))
#define forrr(i,a,b,c) for(re ll (i)=(a);i>=(b);(i)-=(c))
#define forL(i,a,b,c) for(re ll (i)=(a);((i)<=(b)) && (c);(i)++)
#define forR(i,a,b,c) for(re ll (i)=(a);((i)>=(b)) && (c);(i)--)
#define forLL(i,a,b,c,d) for(re ll (i)=(a);((i)<=(b)) && (d);(i)+=(c))
#define forRR(i,a,b,c,d) for(re ll (i)=(a);((i)>=(b)) && (d);(i)-=(c))
#define pii pair<ll,ll>
#define mid ((l+r)>>1)
#define lowbit(x) (x&-x)
#define pb push_back
#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
//#define endl '\n'
#define QwQ return 0;
#define db long double
#define ull unsigned long long
#define lcm(x,y) (1ll*(x)/__gcd(x,y)*(y))
#define Sum(x,y) (1ll*((x)+(y))*((y)-(x)+1)/2)
#define x first
#define y second
template<typename T1,typename T2>bool Max(T1&x,T2 y){if(y>x)return x=y,1;return 0;}
template<typename T1,typename T2>bool Min(T1&x,T2 y){if(y<x)return x=y,1;return 0;}
ll _t_;
void _clear(){}
ll n;
ll x,y;
ll dep[1010];
vector<ll>G[1010];
vector<ll>D[1010];
vector<ll>q;
string s;
ll L,R;
pii ans;
pii ask(vector<ll>a)
{cout<<"? "<<a.size()<<' ';for(auto i:a)cout<<i<<' ';cout<<endl;ll x,y;cin>>x>>y;return {x,y};
}
void dfs(ll x,ll fa,ll deep)
{Max(R,deep);D[deep].pb(x);for(auto i:G[x])if(i!=fa)dfs(i,x,deep+1);
}
void solve()
{_clear();cin>>n;forl(i,1,n)G[i].clear();forl(i,2,n)cin>>x>>y,G[x].pb(y),G[y].pb(x);q.clear();forl(i,1,n)q.pb(i);pii num=ask(q);q.clear();forl(i,1,n)D[i].clear();R=0;dfs(num.x,0,1);L=max(1ll,(num.y+1)/2);Min(R,num.y+1);while(L<R){ll Mid=(L+R+1)/2;pii now=ask(D[Mid]);if(now.y==num.y)ans.x=now.x,L=Mid;elseR=Mid-1;}forl(i,1,n)D[i].clear();dfs(ans.x,0,1);pii num2=ask(D[num.y+1]);ans.y=num2.x;cout<<"! "<<ans.x<<' '<<ans.y<<endl;cin>>s;
}
int main()
{
//    freopen("tst.txt","r",stdin);
//    freopen("sans.txt","w",stdout);
//    IOS;_t_=1;cin>>_t_;while(_t_--)solve();QwQ;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/830857.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

保险公司咨询帮助中心的搭建与维护

大家晚上好,这里是ai元启航,今天这篇分享的文章涉及行业是保险公司。 一、引言 随着保险行业的快速发展,客户对保险服务的需求日益多样化、个性化。为了更好地满足客户需求,提升服务质量,保险公司纷纷搭建咨询帮助中心。本文将探讨保险公司咨询帮助中心的搭建与维护策略,…

在 Github Action 管道内集成 Code Coverage Report

Github Actions 我们的开源项目 Host 在 Github,并且使用它强大的 Actions 功能在做 CICD。单看 Github Actions 可能不知道是啥。其实它就是我们常说的 CICD pipeline 或者叫 workflow。当我们 Push 代码到 Github,它会自动触发这些管道。它会帮我们自动 build 代码,跑 tes…

搭建帮助中心:高新技術行業的内部知识库解决

大家晚上好,这里是ai元启航,今天这篇分享的文章是我这周学习的ai知识之一。在高速发展的高新技术行业中,知识的快速迭代与技术的持续创新是企业保持竞争力的关键。为了有效应对这一挑战,构建一个高效、智能的内部知识库与帮助中心已成为高新技术企业的核心战略。本文将深入…

鸿蒙自定义组件生命周期

在开始之前,我们先明确自定义组件和页面的关系:自定义组件:@Component装饰的UI单元,可以组合多个系统组件实现UI的复用,可以调用组件的生命周期。 页面:即应用的UI页面。可以由一个或者多个自定义组件组成,@Entry装饰的自定义组件为页面的入口组件,即页面的根节点,一个…

Tomcat 整体架构

Tomcat 是什么 Tomcat 是开源的 Java Web 应用服务器,类似的 Java Web 服务器还有 Jetty,Jboss Tomcat 整体架构Tomcat 核心组件 Tomcat 核心组件主要有以下四个 Server、Service、Connector、Container Server:即为一个 Tomcat 实例,每个主机可以启动多个 Server Service:…

第四章 数据编码与演化

本章中将介绍几种编码数据的格式,包括 JSON,XML,Protocol Buffers,Thrift和Avro。尤其将关注这些格式如何应对模式变化,以及它们如何对新旧代码数据需要共存的系统提供支持。然后将讨论如何使用这些格式进行数据存储和通信:在Web服务中,具象状态传输(REST)和远程过程调…

微调大模型-5-导出GGUF

长风破浪会有时,直挂云帆济沧海! 可通过下方链接找到博主 https://www.cnblogs.com/judes/p/10875138.html

学习笔记(三十一):ArkUi-componentUtils

概述: 提供获取组件绘制区域坐标和大小的能力。 一、导入模块import { componentUtils } from @kit.ArkUI; 二、根据组件id获取组件信息 componentUtils.getRectangleByIdgetRectangleById(id: string): ComponentInfo根据组件ID获取组件实例对象, 通过组件实例对象将获取的坐…

Node.js 构建命令行工具:实现 ls 命令的 -a 和 -l 选项

在日常的前端开发中,我们常常借助各种基于 Node.js 的脚手架工具来加速项目搭建和维护,比如 create-react-app 可以一键初始化一个 React 项目,eslint 则帮助我们保持代码的整洁和一致。而在公司内部,为了更好地满足特定业务的需求,我们往往会构建自己的脚手架工具,如自定…

法律行业内部知识库构建:重要性与实施步骤

这里是ai元启航,最近在学习ai相关知识,所以来分享一些这周学习的一些知识点,今天分享的是涉及法律行业的知识库搭建内容。 在当今信息爆炸的时代,法律行业面临着前所未有的挑战。法规的不断更新、案例的日益复杂以及客户需求的多样化,都要求法律从业者能够快速、准确地获取…

视野修炼第109期 | VSCode主题定制

① VS Code 主题定制生成 ② skellyCSS - 轻量级的CSS骨架屏方案 ③ npmpackage.info ④ create-vue 实现性集成 Oxlint ⑤ 英:从 URL 输入到页面渲染的过程 ⑥ 使用 JS 生成随机迷宫 ⑦ gounfaked - 免费的AI图片欢迎来到第 109 期的【视野修炼 - 技术周刊】,下面是本期的精…