【树链】CF1702 G

news2024/10/5 12:46:29

Problem - G2 - Codeforces

题意:

思路:

首先,一条树链可以被分为两部分:左半部分和右半部分

我们可以把所有可能是链上的点排序,把深度最大的点默认成起点st,接下来去找终点ed

ed在和st不同的链上 且 深度最大

即lca(V[i],ed)!=V[i]且深度最大

那么可以把除了这条链的点排序,取深度最大的点作为ed即可

记G=lca(st,ed)

然后去check所有点是否在链上

如果点在链上,那么lca(V[i],st])=G||lca(V[i],ed)=G

如果两个都不满足,那么该点一定不是链上的点

还有一种情况是:G可能分裂成多条链,即V2[i]中的点可能和ed的lca不为V2[i],去除这种情况即可

Code:

#include <bits/stdc++.h>

#define int long long

using namespace std;

const int mxn=2e5+10;
const int mxe=2e5+10;

struct ty{
	int to,next;
}edge[mxe<<2];

int N,Q,u,v,x,K;
int tot=0;
int head[mxn];
int dep[mxn],F[mxn][33];

void add(int u,int v){
	edge[tot].to=v;
	edge[tot].next=head[u];
	head[u]=tot++;
}
void G_init(){
	tot=0;
	for(int i=0;i<=N;i++){
		head[i]=-1;
	}
}
void dfs(int u,int fa){
	dep[u]=dep[fa]+1;
	F[u][0]=fa;
	for(int j=1;j<=20;j++) F[u][j]=F[F[u][j-1]][j-1];
	for(int i=head[u];~i;i=edge[i].next){
		if(edge[i].to==fa) continue;
		dfs(edge[i].to,u);
	}
}
bool cmp(int x,int y){
	return dep[x]<dep[y];
}
int lca(int u,int v){
	if(dep[u]<dep[v]) swap(u,v);
	for(int j=30;j>=0;j--){
		if(dep[F[u][j]]>=dep[v]){
			u=F[u][j];
		}
	}
	if(u==v) return u;
	for(int j=30;j>=0;j--){
		if(F[u][j]!=F[v][j]){
			u=F[u][j];
			v=F[v][j];
		}
	}
	return F[u][0];
}
void solve(){
	cin>>N;
	G_init();
	for(int i=1;i<=N-1;i++){
		cin>>u>>v;
		add(u,v);
		add(v,u);
	}
	dfs(1,0);
	cin>>Q;
	while(Q--){
		vector<int> V,V2;
		cin>>K;
		for(int i=1;i<=K;i++){
			cin>>x;
			V.push_back(x);
		}
		sort(V.begin(),V.end(),cmp);
		int st=V.back();
		for(int i=0;i<V.size()-1;i++){
			if(lca(st,V[i])!=V[i]) V2.push_back(V[i]);
		}
		if(V2.empty()){
			cout<<"YES"<<'\n';
			continue;
		}
		sort(V2.begin(),V2.end(),cmp);
		int ed=V2.back();
		int G=lca(st,ed);
		int ok=1;
		for(int i=0;i<V2.size()-1;i++){
			if(lca(V2[i],ed)!=V2[i]) ok=0;
		}
		for(int i=0;i<V.size();i++){
			if(lca(V[i],st)!=G&&lca(V[i],ed)!=G) ok=0;
		}
		if(ok) cout<<"YES"<<'\n';
		else cout<<"NO"<<'\n';
	}
}
signed main(){
	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	int __=1;//cin>>__;
	while(__--)solve();return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MSA【1】:Segment Anything Model for Medical Image Analysis: an Experimental Study

文章目录 前言1. Abstraction & Introduction1.1. Abstraction1.2. Introduction1.2.1. What is SAM?1.2.2. How to segment medical images with SAM? 2. Methodology2.1. SAM is used in the process of segmentation of medical images2.1.1. Semi-automated annotati…

【压力传感器】LPS22DFTR、LPS33KTR 绝对 压力,ADP5131 排气式压力计 50kPa 6-DIP

LPS22DFTR MEMS纳米压力传感器是一款超紧凑型压阻式绝对压力传感器&#xff0c;可用作数字输出气压计。LPS22DF的功耗更低&#xff0c;与上一代产品相比压力噪声更低。该器件包括一个传感元件和一个IC接口&#xff0c;通过I2C、MIPI I3CSM或SPI接口从传感元件向应用程序进行通信…

蒙德里安的梦想

题目 求把 NM 的棋盘分割成若干个 12 的长方形&#xff0c;有多少种方案。 例如当 N2&#xff0c;M4 时&#xff0c;共有 5 种方案。当 N2&#xff0c;M3 时&#xff0c;共有 3 种方案。 如下图所示&#xff1a; 输入格式 输入包含多组测试用例。 每组测试用例占一行&…

GO语言基础-04-数据类型-04-map(map的排序)

文章目录 1. 按value排序1.1 思路1.2 语法1.3 完整示例 2. 按key排序2.1 思路2.2 语法示例2.3 完整示例2.4 完整示例 1. 按value排序 1.1 思路 map本身的顺序不可控&#xff0c;我们考虑如下方法实现排队&#xff1a; 思路一&#xff1a;通过一个切片来接收拍好队的map成员思…

多线程应用场景

文章目录 前言一、CountDownLatch倒计时锁二、如何控制线程并发数&#xff1f;三、浅聊ThreadLocal1.ThreadLocal定义2.ThreadLocal源码解读3.关于ThreadLocal的一个案例 总结 前言 本篇介绍多线程中的应用场景&#xff0c;比如倒计时锁CountDownLatch、信号量Semaphore、以及…

【雕爷学编程】Arduino动手做(163)---大尺寸8x8LED方格屏模块5

37款传感器与模块的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&#x…

一种简化的3D点云车道线自动识别标注一些思考

0. 简介 作为3D车道线训练来说&#xff0c;数据集是至关重要的&#xff0c;而使用点云的精确性来完成准确的车道线地图构建是一个非常重要且有趣的事情。下面我们将会从一个例子开始&#xff0c;分阶段来告诉大家该怎么样去完成一个简单的3D点云车道线自动识别标注工具。 1. …

WordPress作为可扩展的企业级解决方案

网络商业世界就像一片汪洋大海&#xff0c;大型企业是大海中最大的鱼。然而&#xff0c;只因为你比其他人都大&#xff0c;并不意味着你不能逆流而上。相反&#xff0c;企业业务面临的挑战更大&#xff0c;对网站的技术要求更高。 多年来&#xff0c;大型公司通常依赖最昂贵的…

爆肝整理,接口自动化测试面试题+答案,25k*15薪如何达成的...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、请问你是如何做…

MB10S-ASEMI迷你贴片整流桥50MIL芯片MB10S

编辑&#xff1a;ll MB10S-ASEMI迷你贴片整流桥50MIL芯片MB10S 型号&#xff1a;MB10S 品牌&#xff1a;ASEMI 芯片个数&#xff1a;4 封装&#xff1a;MBS-4 恢复时间&#xff1a;50ns 工作温度&#xff1a;-50C~150C 浪涌电流&#xff1a;30A 正向电流&#xff1a;1…

HttpRunner自动化测试之辅助函数debugtalk.py

辅助函数debugtalk.py Httprunner框架中&#xff0c;使用yaml或json文件进行用例描述&#xff0c;无法做一些复杂操作&#xff0c;如保存一些数据跨文件调用&#xff0c;或者实现一些复杂逻辑判断等&#xff0c;为了解决这个问题&#xff0c;引入了debugtalk.py辅助函数来进行一…

Linux操作系统升级低版本的OpenSSH到9.3的高版本

OpenSSH 9.3之前的版本存在各种各样的安全漏洞&#xff0c;为此&#xff0c;我们需要将OpenSSH升级到最新的9.3的版本。 执行&#xff1a;ssh -V&#xff0c;我们可以查看当前的openssh版本 为了避免升级过程中出现意外而导致服务器无法正常使用&#xff0c;建议操作前先对服务…

插槽的使用!!

什么是插槽 插槽&#xff08;Slot&#xff09;是 vue 为组件的封装者提供的能力。允许开发者在封装组件时&#xff0c;把不确定的、希望由用户指定的部分定义为插槽。可以把插槽认为是组件封装期间&#xff0c;为用户预留的内容的占位符 即&#xff1a;使用者来决定某一块区域…

开利网络拜访番禺前后仓国际珠宝基地,以数字化技术赋能产业升级

近日&#xff0c;开利网络拜访位于番禺的前后仓国际珠宝基地&#xff0c;对基地目前的数字化需求和产业升级方向进行了解和探讨。目前&#xff0c;基地拥有以数字贸易综合服务中心&#xff0c;以人才、流量、运营、金融为抓手&#xff0c;以供应链选品、直播电商、跨境电商为媒…

【C++医学影像PACS】CT检查中的三维重建是什么检查?

一、【PACS影像科普】CT检查中的三维重建是什么检查&#xff1f; 三维重建是多层螺旋CT的一个最大的优点&#xff0c;也是影像工作多年来&#xff0c;从横断解剖到多平面&#xff0c;乃至立体的一次飞跃&#xff0c;让抽象变的形象&#xff0c;大大地提高了准确性&#xff0c;为…

大数据测试之数据仓测试怎么做(下)

前面的文章我们为大家介绍了一个常见的互联网大厂的数据仓的技术框架&#xff0c;也就是下面这张图所展示的内容。 为大家介绍了从操作数据层&#xff0c;到DW层&#xff0c;再到汇总数据层&#xff0c;最后到维度层和数据应用层的整个流程。本文我们将整个架构打平来展示制作…

我们正在开发一套组件库,欢迎你的加入~

项目地址 github地址 可以先点进来康康~ 技术栈 目前我们整体采用的是vue3typescriptless作为整体的开发的选择 需要说的是&#xff0c;我们并没有采用很多组件库采用的TSX的写法&#xff0c;而是选择了SFC的写法&#xff0c;这是因为我们觉得对于大部分的vue开发者来说&am…

用得最多的企业文件加密软件【企业文件加密软件前十】

企业文件加密软件是一种专门设计用于保护企业敏感信息的软件工具。它通过使用加密算法将企业的文件、文件夹和移动设备上的数据转化为不可读的格式&#xff0c;以防止未经授权的访问和数据泄露。这些软件通常提供了多种加密算法和安全控制选项&#xff0c;以满足不同企业的安全…

国外访问学者博士后常用的网络视频面试软件

面试是获得邀请函的重要环节&#xff0c;随着网络的广泛应用&#xff0c;现在视频面试逐渐取代了电话面试&#xff0c;本篇知识人网小编介绍几种国外访问学者博士后常用的网络视频软件。 在申请国外博士后或者访问学者职位时&#xff0c;当接收方导师收到CV&#xff08;简历&am…

postgis上传 上千个资源文件

需求背景所需工具解决流程1. 获取文件名信息2.复制到 excel 表格中3.转成 csv 文件 需求背景 需要把上千个文件资源上传到远端&#xff0c;并建立数据表 所需工具 Notepad 7wps office 11.1.0 解决流程 1. 获取文件名信息 复制文件路径&#xff0c;在 cmd 中进到文件夹&…