HDU - 6031 Innumerable Ancestors

Frida实战:如何逆向分析某电商App的doCommandNative函数(附完整Hook脚本) 本文详细介绍了如何使用Frida逆向分析电商App中的doCommandNative函数,涵盖动态注册识别、SO加固对抗及高级Hook脚本编写等实战技巧。通过完整Hook脚本示例,帮助安全研究人员深入理解JNICLibrary的关键函数逆向分析方法,提升移动应用安全研究能力。 阅读详情

题意:给一棵树,m次查询, 每次查询给两个集合, 从这两个集合里分别选一个结点,使得这两个节点的lca的深度最大。

考虑dfs序为5,6,7的三个节点,5,6的lca深度一定大于等于5,7的lca深度

所以可以讲查询集合按dfs序排序,然后类似尺取的操作,使得每一对dfs序接近的节点都做一次lca,选一个最深的就可以了

#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e5 + 10;
vector<int>w[maxn];
int dep[maxn], fa[maxn], st[maxn], up[maxn][21], n, tot;
void init(){
	for(int i = 1; i <= n; i++)
		up[i][0] = fa[i];
	for(int i = 1; i <= 20; i++)
		for(int j = 1; j <= n; j++)
			up[j][i] = up[up[j][i - 1]][i - 1];
	return ;
}
int lca(int u, int v){
	if(dep[u] < dep[v])
	swap(u, v);
	int dis = dep[u] - dep[v];
	for(int i = 0; i <= 20; i++){
		if(dis & (1 << i)){
			u = up[u][i];
		}
	}
	if(u == v)
	return u;
	for(int i = 20; i >= 0; i--){
		if(up[u][i] != up[v][i]){
			u = up[u][i];
			v = up[v][i];
		}
	}
	return fa[u];
}
void dfs(int f, int x){
	st[x] = tot++;
	fa[x] = f;
	dep[x] = dep[f] + 1;
	for(int i = 0; i < w[x].size(); i++){
		if(w[x][i] != f){
			dfs(x, w[x][i]);
		}
	}
	return ;
} 
int s1[maxn], s2[maxn];
int cmp(int u, int v){
	return st[u] < st[v];
}
int main(){
	int m, u, v, k1, k2;
	while(cin >> n >> m){
		for(int i = 1; i <= n; i++)
		w[i].clear();
		for(int i = 1; i < n; i++){
			scanf("%d %d", &u, &v);
			w[u].push_back(v);
			w[v].push_back(u);
		}
		tot = 0;
		dfs(0, 1);
		init();
		while(m--){
			int ans = 0;
			scanf("%d", &k1);
			for(int i = 0; i < k1; i++)
				scanf("%d", &s1[i]);
			scanf("%d", &k2);
			for(int i = 0; i < k2; i++)
				scanf("%d", &s2[i]);
			sort(s1, s1 + k1, cmp);
			sort(s2, s2 + k2, cmp);
			int i1 = 0, i2 = 0;
			while(i1 < k1 && i2 < k2){
				ans = max(ans, dep[lca(s1[i1], s2[i2])]);
			//	cout << s1[i1] << " " << s2[i2] << endl;
			//	cout << lca(s1[i1], s2[i2]) << endl;
				if(st[s1[i1]] > st[s2[i2]])
				i2++;
				else
				i1++;
			}
			printf("%d\n", ans);
		}
	}
	return 0;
} 
还有一种做法,复杂度比这个高,二分深度,然后把第一个集合所有在此深度的父节点存到set或map里,在判断第二个集合所有节点有没有相同的此深度的父节点。


PCL 4PCS算法实现点云粗配准【2026最新版】 博客长期更新,本文最新更新时间为:2026年5月11日。 阅读详情

相关推荐

从零到一:YT8512C PHY芯片在STM32F407上的LWIP移植实战与避坑指南

本文详细介绍了YT8512C PHY芯片在STM32F407平台上基于LWIP协议栈的移植实战,涵盖硬件连接、CubeMX配置、寄存器定制和调试技巧。重点解析了与主流PHY芯片的差异,提供了完整的避坑指南和优化建议,帮助开发者快速实现稳定可靠的嵌入式网络连接。

uber9的博客 538

HDU - 6031 (lca) (暴力剪枝 或者 二分)

Innumerable Ancestors HDU - 6031 ...

DS00HY的小博客 356

什么是无人机电源管理模块?电源管理模块有什么用处?

我来描述一下我的问题情景,电源管理模块的定义是,这里给出这个PX4官方对于电源管理模块的一些介绍,补充一下锂电池的放电原理大家就可以更好理解为什么需要电源管理模块

HRWVY0725的博客 2273

hdu 6031 Innumerable Ancestors(LCA+剪枝)

题目链接:hdu 6031 Innumerable Ancestors 题意: 给你一棵n个节点的树,现在有m个询问,每次给你两个点集a,b。 让你从a,b点集中选两个点x,y,使得这两个点的LCA的深度最大。 题解: 标解应该是二分+LCA,不过我试了一下暴力,稍微剪了点枝,就直接过去了。 具体看代码 1 #include<bits/stdc++.h> 2...

weixin_30667301的博客 135

(UE5 5.2)HISM Mobile DrawInstance在渲染层的实现浅分析

在 (UE4 4.27) UHierarchicalInstancedStaticMesh(HISM)原理分析 这篇博客大致介绍HISM组件从游戏线程到渲染线程的重建KD-Tree和剔除并提交DrawCall逻辑,但是没有分析渲染层的大致数据结构和实现. 可以看出FHierarchicalStaticMeshSceneProxy 实际存储Instance数组数据来自于FInstancedStaticMeshSceneProxy FHierarchicalStaticMeshSceneProxy只是以FClu

qq_29523119的博客 2725

STM32G4 电机外设篇(三) TIM1 发波 和 ADC COMP DAC级联

STM32G4电机控制外设应用笔记摘要:本文详细介绍了TIM1高级定时器生成三对互补PWM波的配置方法(预分频器PSC=30000,重装载值ARR=10000),重点说明需断开电机连线避免干扰。通过STM32CubeMX配置TIM1通道4触发ADC采样,设置RCR分频参数,并给出Keil代码修改要点。第二部分探讨了TIM1、ADC、比较器和DAC的级联应用,包括电流采样触发时序(在PWM波峰值前采样)和过流保护机制。配置步骤包含DAC3作为比较器负输入端、设置Break触发封波保护,并附关键代码段实现外设联

qq_43091070的博客 1102

HDU 6031 Innumerable Ancestors(LCA,树链剖分)

题意: 对于给定的一棵树,树上点的数目为nn,有qq次询问,每次寻味给定两个点集A,BA,B,求MAX(LCA(u,v)),u∈A,v∈BMAX(LCA(u,v)),u\in A,v\in B.其中k=∑mi=0(size(A)+size(B)),,k≤1e6,n≤1e6k=\sum_{i=0}^{m}{(size(A)+size(B))},,k\leq 1e6, n\leq 1e6。思路: 先对树

宝树啊宝树 558

路径规划 | 图解RRT*算法(附ROS C++/Python/Matlab仿真)

RRT*算法针对传统RRT算法进行了渐进最优改进,在添加节点到搜索树的过程中进行重连选择。本文图解RRT*算法原理,并采用ROS C++、Python、Matlab三种语言实现算法,加深理解

FRIGIDWINTER的博客 9405

hdu6031 Innumerable Ancestors (二分+树上倍增)

题意 n个点的树,m个询问,每次询问 给出两个集合a和b,找到a的一个元素x,b的一个元素y,使得lca(x,y)深度最大 输出lca(x,y)的最大深度 思路: 深度满足二分性质: 深度大的如果满足,则深度小的也一定满足 二分深度,然后对于集合a和集合b的每个点,求他们的深度为mid的祖先, 如果深度为mid的祖先有交集说明可以找到x,y,lca(x,y)等于mid 求祖先用树上倍增 code:...

zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz 238

基于工作流的低代码AI应用开发:Flock平台核心架构与实战指南

在AI应用开发领域,工作流编排正成为连接大语言模型(LLM)能力与复杂业务逻辑的关键技术。其核心原理是将任务分解为模块化节点,通过可视化方式定义执行顺序与数据流向,从而实现灵活可控的自动化流程。这种范式极大地提升了开发效率,降低了技术门槛,使得开发者能够聚焦于业务设计而非底层代码。在技术价值层面,工作流编排支持检索增强生成(RAG)、多智能体协作等高级模式,并能通过人工干预节点确保关键流程的可靠性与合规性。其典型应用场景包括智能客服、自动化办公、数据分析助手等。本文以Flock平台为例,深入解析了如何利用其

weixin_26848497的博客 381

硬件工程师学习-硬件的单元测试(UT)(1)电源与时钟的测试

我们在设计的时候,通过控制电源的上电使能管脚或者通过MOSFET、或者专用的电源上电控制芯片,控制不同电源的上电时序,以确保每个芯片的电源上电时序是满足芯片的要求的。我们在测试的时候,需要对相关的要求一一测试,以确认每个上电时序满足要求的。在维基百科中,相位噪声的定义是“时域不稳定性(抖动)导致波形在相位上发生快速、短期、随机的波动,这种波动在频域中的表现即为相位噪声”。单元测试,一般是指基于开发人员自行开展的功能测试及各个功能单元的单元测试,是硬件信号级的测试,分为基本测试和信号完整性测试。

qq_43416206的博客 4033

【HDU6031】Innumerable Ancestors(二分+LCA)

题目链接题目大意: 给你n个点树,m个查询 每次查询给出两个点集A,B。 求x∈A,y∈Bx\in A,y\in B 使得lca(x,y)的深度最大lca(x,y)的深度最大倍增lca相关知识 用倍增法处理出lca 然后对每个查询二分深度 处理出A集合的点在二分深度的祖先集合 然后判断B集合里是否存在一个点的祖先在上述集合里#include <bits/stdc

No Program No Life 1150

5G射频设计中N77&N79的PRX为什么需要3个SRS

首先,我们来逐个拆解一下这个神秘的“

weixin_43199439的博客 1323

hdu6031 Innumerable Ancestors

hdu6031 Innumerable Ancestors 倍增 题意 给定一张无向图,对于每组询问,给出两个集合 A 与 B 求 lca(x,y) 最深的时候的深度 x属于A y属于B 题解 首先 我们发现答案具有单调性,于是我们就可以二分这个答案 mid 然后 把 a 集合 的 这个深度的祖先 求出来 然后看 与b 集合的这个深度 祖先 是否有交集就行了 用s...

weixin_34146410的博客 100

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

HDU6031 Innumerable Ancestors LCA

要求两个集合中两点最深的公共祖先。我们二分最深的深度,之后判断是否有两个集合的点在这个深度有公共祖先。对于当前深度mid,我们对于每一个a【i】,判断在mid出是否有点,有则加入set,没有不加。之后在枚举每一个b,判断b【i】在mid出的点是否在set中,如果在,说明当前b【i】与a中至少一点在mid深处有公共祖先。则返回true,再往更深的深度查询即可。#include&lt;cstdio&g...

Little_boy_z的博客 339

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

HDU 6031 Innumerable Ancestors【LCA】

题目链接 题意:n个点形成的一棵树,根节点为1,给两个点的集合A和B,从A和B中各取出一点,要求这两个点的LCA最大(深),输出最大深度。 先求一遍LCA,因为两个点的LCA不可能比这两个点都要深,所以按深度从大到小排序,剪枝:如果当前的最大深度比比较到的点要深则直接退出。 倍增LCA #include #include #include #include #include #i

hxh的博客 395

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

hdu 6031 Innumerable Ancestors

问题简化为,给定一个节点,求另外一点与它的lca的深度最大,可知dfs序列最接近的两点的lca的深度最大,所以,可以将给定集合中的节点按他的dfs序从小到大排序,二分找到最接近的那个,因为二分找到的只是比它大的最接近的一个,可能前一个比它小的更为接近,所以做两次判断。集合中有重复元素,并不会妨碍我们判断。 #include #include #include #include #incl

熟睡的哲学家的博客 812

【HDU 6031]】 Innumerable Ancestors

题意 有一棵有n个结点的树,这里有m个询问,每个询问给出两个非空的结点集合A和B,有些结点可能同时在这两个集合当中。你需要从A和B中分别选择一个节点x和y(可以是同一个结点)你的目标是使LCA(x,y)的深度最大。n,m<=100000 分析 LCA算法每次查询的复杂度都是logn的,如果每个查询都枚举两个集合,那么均摊的时间复杂度是n^2logn(好像··大概··是吧?? ...

weixin_30786617的博客 162

HDU 6031 Innumerable Ancestors

树状数组,倍增,枚举,$dfs$序。 对于每一次的询问,可以枚举$B$集合中的所有点,对于每一个点,在树上二分$LCA$,找到最低的更新答案。 判断是否是$LCA$可以搞个$dfs$序,将$A$集合中所有点标$1$,然后查询子树对应的区间上的区间和。 #include <bits/stdc++.h> using namespace std; const int max...

weixin_34148340的博客 120

HDU 6031 Innumerable Ancestors[树链剖分]

题意:给定一颗n个节点的树,然后是m个询问,每个询问是两个集合,问分别在这两个集合中取一个点,这两个点的LCA 的深度最大为多少。 分析:首先想到的肯定是for两个集合,O(k^2),肯定要爆炸。我们对这棵树进行树链剖分,剖完之后的树最多有logn条链,那么,我们将这两个集合中的点,根据他们所在的链分类,如果两个点位于同一条链,我们取深度更深的那个点,这样处理之后,每个集合中最多只有logn个点

C_z_Q 470

HDU-6031 Innumerable Ancestors(二分+树上倍增)

题意 给一棵树,$m$次询问,每次询问给两个点集问从两个点集中各取一个点的$LCA$的最大深度。 思路 二分答案。对于某个二分过程中得到的$Mid$,如果可行则两个点集在$Mid$所在的深度存在公共的祖先。枚举点集内的点,倍增找到他在这个深度的祖先就行。 代码 #include <bits/stdc++.h> #define DBG(x) cerr <&...

weixin_30341735的博客 117

hdu 6031 Innumerable Ancestors lca + 二分

题目:http://acm.hdu.edu.cn/showproblem.php?pid=6031题意:给定一个无向树形图,1为根,对于每次查询,给出两个集合,问两个集合中各选出一个点的最近公共祖先的深度最深为多少思路:用倍增求lca,然后二分枚举答案,求出第一个集合中的点在枚举的深度上的祖先,并标记这些祖先,然后求第二个集合中的点在枚举的深度上的祖先,检查两个集合在枚举深度上的祖先有没有重合,有重

弱智就要多努力 471

2017CCPC女生赛 hdu 6031 Innumerable Ancestors

题目链接分析: 二分答案,然后枚举A集合的元素,把那个深度的节点放到集合里,再枚举B集合的点看能否有集合里的节点是B的祖先。自己真是好菜= =不光这个倍增,还有ST,我一直把for (int k = 1; (1 << k) <= n; k ++) 写成 for (int k = 1; k <= n; k <<= 1) = =而且总检查不出这个错- -写个博客提醒一下。代码:#include <io

萌の上揺れ 607

HDU - 6031 Innumerable Ancestors——lca

把集合b按dfs序排序,然后对于集合a的每个元素a【i】对应的dfs序id【i】,在b中二分与他最接近的那个值(用lower_bound的话要判一下当前位置和当前位置-1看看哪个更接近),然后做lca求最大值即可#include &lt;cstdio&gt; #include &lt;cstring&gt; #include &lt;iostream&gt; #include &lt;algori...

hao_zong_yin的博客 368

HDU 6031 Innumerable Ancestors (LCA)

There is a tree having n nodes, labeled from 1 to n. The root of the tree is always 1, and the depth of a node p is the number of nodes on the shortest path between node p and the root. In computer sc

DorMOUSENone的博客 815

HDU6031:Innumerable Ancestors(二分+倍增数组)

传送门 题意 n个点的图,有n-1条无向边,m个询问,每次询问 给出两个集合a和b,找到a的一个元素x,b的一个元素y,使得x和y的lca深度最大 分析 这道题如果直接暴力做,复杂度为O(mk1k2*n),爆掉 考虑二分lca的深度,那么进行如下处理,对于深度deep,如果两个集合(a存在元素x,b存在元素y),使得x向上走depth[x]-deep次与y向上走depth[y]-deep...

anquan1533的博客 191
上一篇: CodeForces - 618D Hamiltonian Spanning Tree 思维
下一篇: ZOJ - 2770 差分约束
jerans
博客等级 码龄10年 54粉丝 255原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值