poj-1330-Nearest Common Ancestors-LCA(RMQ)

python调用海康工业相机并用opencv显示(整体实现) python语言调用海康机器人(hikrobotics)工业相机 第一章 Python 语言下连接海康工业相机,并获取数据 文章目录 系列文章目录 前言 目录 python语言调用海康机器人(hikrobotics)工业相机 文章目录 前言 一、底层接口的准备 二、使用步骤 1.引入库 2.枚举设备 3.判断设备类型 4.输入连接设备 5.创建相机实例并创建句柄 6.打开设备 7.获取相关参数 8.主动获取图像 9.开启取流并获取每张. 阅读详情

题目传送门:http://poj.org/problem?id=1330


什么是LCA?

公共祖先简称LCA(Lowest Common Ancestor),所谓LCA,是当给定一个有根树T时,对于任意两个结点u、v,找到一个离根最远的结点x,使得x同时是u和v的祖先,x 便是u、v的最近公共祖先。

 

额 ̄へ ̄  听说有好多种解法,但是我就先发一种,其他回来补上

 如果RMQ不会,请看http://blog.youkuaiyun.com/newproblems/article/details/77183394

开始






1 .在遍历数组中找到7和 16 第一次出现的位置。


2 .在节点深度中,找到涂色序列的最小值----1,则4就是7和16 的共同祖先。

 


上图解释的最快O(∩_∩)O


邻接表存图


不定长数组:vecter

定义方式:vecter<int> a


基本的操作:


a.size()     读取它的大小

a.resize()   改变大小

a.push_back()  向尾部添加元素

a.pop_back()   删除最后一个元素

a.empty()   判断数组是否为空

a.clear()   清空数组


另外,常用vecter<int> a[max](相当于二维数组,第一维大小固定,第二维大小不固定)

 

邻接表是对图中的每个顶点建立起一个单链表。大白话,就是与下标,相连的点放到对应下标的数组中。用vector就可以实现。例如:上图的a[1]->14->13


vector数组内部的存储方式类似于链表,直接用就行了。

 

图的度是指和该顶点相关联的边数。

在有向图中,度又分为入度和出度。

顶点的入度:以某顶点为弧头,终止于该顶点的弧的数目。(指向它的有几条)

根节点的入度为0。




完整代码


代码解释:


遍历数组------------>  vis
节点深度------------>  depth

邻接表图------------>  G     

入度表--------------->  in


id[i]是记录i第一次出现的位置


本题之所以要记录入度,是因为题目未给出根节点的位置需要通过遍历in找出

还要注意,这是下标在找最小值


#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <cstdio>
#include <cmath>
#include <queue>
#include <vector>
#include <set>
#include <map>
#define N 300010
using namespace std;

vector<int> G[N];
int vis[N], id[N], depth[N], in[N], k;
int dp[N][30];

int  Min(int a, int b)
{
    if(depth[a] <= depth[b])
        return a;
    return b;
}

void init_rmq(int n)
{
    for(int i = 1; i <= n; i++)
        dp[i][0] = i;
    for(int j = 1; (1 << j) <= n; j++)
        for(int i = 1; i + (1 << j) - 1 <= n; i++)
            dp[i][j] = Min(dp[i][j - 1], dp[i + (1 << (j - 1))][j - 1]);
}

void dfs(int v, int d)
{
    id[v] = k;
    vis[k] = v;
    depth[k] = d;
    k++;
    for(int i = 0; i < G[v].size(); i++)
    {
        dfs(G[v][i], d + 1);
        vis[k] = v;
        depth[k] = d;
        k++;
    }
}

void init(int root, int n)
{
    k = 1;
    dfs(root, 0);//递归生成上面的那个表格
    init_rmq(2 * n - 1);
}

int query(int l, int r)
{
    int len = r - l + 1;
    int k = (int)(log10(len * 1.0) / log10(2.0));
    int ans = Min(dp[l][k], dp[r - (1 << k) + 1][k]);
    return vis[ans];
}

int main()
{
    int T;
    scanf("%d", &T);
    while(T--)
    {
        int n;
        scanf("%d", &n);

        for(int i = 1; i < N; i++)//多组数据需清空
            G[i].clear();

        memset(in, 0, sizeof(in));

        for(int i = 1; i < n; i++)// 存图
        {
            int a, b;
            scanf("%d%d", &a, &b);
            G[a].push_back(b);
            in[b] = 1;
        }

        int i;
        for(i = 1; i <= n; i++)
            if(in[i] == 0)
                break;//找根节点

        init(i, n);

        int x, y;
        scanf("%d%d", &x, &y);

        int ans = query(min(id[x], id[y]), max(id[x], id[y]));
        printf("%d\n", ans);
    }
    return 0;
}







Shader Graph实战:5分钟搞定Flow Map水体流动效果(含UV偏移避坑指南) 本文详细解析了如何使用Unity的Shader Graph工具快速实现Flow Map水体流动效果,涵盖基础原理、核心节点搭建、高级技巧及性能优化。特别针对UV偏移问题提供避坑指南,帮助开发者轻松打造专业级动态水面效果,适合游戏场景增强视觉表现。 阅读详情

相关推荐

opencv基础57-模板匹配cv2.matchTemplate()->(目标检测、图像识别、特征提取)

OpenCV 提供了模板匹配(Template Matching)的功能,它允许你在图像中寻找特定模板(小图像)在目标图像中的匹配位置。模板匹配在计算机视觉中用于目标检测、图像识别、特征提取等领域。: 首先,加载目标图像和要匹配的模板图像。: 选择适当的匹配方法,例如 cv2.TM_CCOEFF、cv2.TM_CCOEFF_NORMED、cv2.TM_CCORR、cv2.TM_CCORR_NORMED、cv2.TM_SQDIFF 或 cv2.TM_SQDIFF_NORMED。每种方法对应不同的匹配计算方式。

小海聊智造 1万+

POJ 1330 LCA转RMQ模板题

最裸地LCA,今天看了郭华阳的论文,顺便网上搜了些资料,学了学LCA转化为RMQ问题的解法。实现过程各种错,最后debug好长时间,最后被hack哥、模板帝万能的bin哥(Kuangbin)给改对了,Orz。。。。。。     /********************** * author:crazy_石头 * Pro:POJ 1330 * algorithm

crazy_石头的专栏 986

告别懵圈!用CANoe手把手解析ISO15765多帧传输(附实战报文分析)

本文详细解析了ISO15765多帧传输协议在汽车电子诊断中的应用,通过CANoe实战演示了从首帧发送到流控协商再到连续帧传输的完整流程。文章包含嵌入式系统诊断协议的深度分析,特别适合UDS和CAN总线开发人员学习多帧传输机制及常见问题解决方案。

weixin_30813225的博客 281

poj 1330 树上LCA+RMQ

<br />#include<iostream><br />#include<cstring><br />#include<cmath><br />using namespace std;<br />const int N = 10005;<br />const int M =

kongming_acm的专栏 636

STM32 HAL库驱动BMP388:从寄存器配置到高精度气压温度采集

本文详细介绍了如何使用STM32 HAL库驱动BMP388气压温度传感器,实现高精度数据采集。内容涵盖从硬件连接到STM32CubeMX配置、关键寄存器解析、驱动源码编写,到核心补偿算法与海拔换算的完整流程,并提供了针对不同应用场景的优化配置与调试技巧,帮助开发者快速构建稳定可靠的测量方案。

weixin_29299807的博客 171

台达伺服B3驱动器参数的设定和CN1的接法

3. B2的电子齿轮比是直接设定P1-44(分子)和P1-45(分母)就就可以的,但是B3的有个隐藏的细节,就是P1-44的默认值77216不用去更改,这是官方客服说的,需要改的是P1-45这个参数,比如说,我使用的丝杆螺距是5mm的,那么就是以5000脉冲走完5mm为一圈,则就把P1-45设定为5000即可;我的是三菱FX3S系列的PLC,是NPN型的,输出点是24V-作为信号的,所以接41、37,具体可参考B3的。,跟着客服的讲解操作才解决的,以下就是解决方法,希望能够帮到需要的各位。

qq_38681017的博客 1万+

POJ 1330 Nearest Common Ancestors (在线LCA转RMQ)

题目地址:POJ 1330 在线LCA转RMQ第一发。所谓在线LCA,就是先DFS一次,求出遍历路径和各个点深度,那么求最近公共祖先的时候就可以转化成求从u到v经过的点中深度最小的那个。 纯模板题。 代码如下:#include <iostream> #include <string.h> #include <math.h> #include <queue> #include <algorith

scf0920 886

2024年广东省职业院校技能大赛“区块链技术应用”任务书—区块链应用系统开发参考答案

摘要 本文档提供了2024年广东省职业院校技能大赛"区块链技术应用"项目中区块链电子签章前端功能开发的参考答案。主要内容包括:1)注册页面开发,实现身份证号码双向绑定和注册请求发送;2)登录页面开发,实现用户认证、状态保存和页面跳转;3)个人印章页面开发,实现注销功能和印章信息展示。每个任务均包含具体实现代码片段和功能测试要点,涵盖Vue.js框架下的数据绑定、axios请求处理和本地存储等关键技术点。

我是网络安全兼技能大赛工程师,专注网络安全技术学习与技能大赛实战!持续分享最新的技术文章,帮你少走弯路,一起在技术赛道上进步~ 343

poj 1330(RMQ&LCA入门题)

传送门:Problem 1330 https://www.cnblogs.com/violet-acmer/p/9686774.html    参考资料:   http://dongxicheng.org/structure/lca-rmq/   挑战程序设计竞赛(第二版) 变量解释:   对有根树进行DFS,将遍历到的节点按照顺序记下,我们将得到一个长度为2N-1的序列,称之...

weixin_30419799的博客 159

3.7 改造模型:为GPT添加一个分类头(Classification Head)

本文介绍如何改造GPT模型用于文本分类任务。主要内容包括: 分类头设计思路:GPT作为语言模型需要添加分类头才能适应分类任务,类似于为语言大师添加裁判功能。 序列表示选择策略: 分析三种常见方法(CLS标记、平均池化、最后词元表示) 推荐使用最后词元表示,因其最能反映GPT的单向信息流特性 代码实现: 构建GPT2ForSequenceClassification类 包含预训练GPT主体和线性分类头 使用attention_mask智能定位句子结尾 通过高级索引提取最后词元特征 该方法通过简单改造使GPT模

yonggeit的博客 2971

基于STM32、HAL库的W25Q01JVZEIQ TR FLASH存储器驱动应用程序设计

1Gb (128MB),分为512个可擦除块(block),每个块256KB。:块擦除约30-50ms,芯片擦除约30s。:标准SPI (支持1/2/4线模式)// 初始化CS引脚为高电平。// 擦除扇区(4KB)// 初始化Flash。/* 状态寄存器位 *//* 指令定义 *//* 超时定义 *//* 函数声明 */

corlin6688的博客 267

Nearest Common Ancestors(POJ-1330)(LCA转RMQ在线算法)

Nearest Common Ancestors Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 29996   Accepted: 15332 Description A rooted tree is a well-known data structure in

殇星痕的博客 353

Bean named‘ddlApplicationRunner‘is expected to be of type ‘org.springframework.boot.Runner‘

springboot3.1.7整合mybatisplus3.5.3.2版本报错,sringboot3.x整合myabtis报错

雾林小妖的博客 1万+

poj 1330 Nearest Common Ancestors lca rmq在线算法

题意:裸的lca 思路:直接上rmq在线模板 题目链接:http://poj.org/problem?id=1330 #include #include #include #pragma warning (disable: 4996) using namespace std; const int maxn = 10005; struct edge {

zyh 516

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

POJ 1330 Nearest Common Ancestors (LCA,RMQ,DFS序)

A rooted tree is a well-known data structure in computer science and engineering. An example is shown below:   In the figure, each node is labeled with an integer from {1, 2,...,16}. Node 8 is the roo...

YIU 205

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

POJ1330,Nearest Common Ancestors(LCA+RMQ/倍增/Tarjan)

LCA的裸题。LCA可以用三种方式求解,其中离线算法有Tarjan,在线算法有倍增,RMQ,个人觉得RMQ效率会高一点。 有个博客讲解的很好,链接: https://blog.youkuaiyun.com/my_sunshine26/article/details/72717112 这里我总结了一下三种方法的关键点: 1.Tarjan求LCA 核心:离线+DFS后序遍历+并查集 1.开设vis[i], fa[...

shamansi99的博客 239

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

POJ 1330 Nearest Common Ancestors [LCA+RMQ]

LCA的入门题,我用的是ST在线算法和Tarjan离线算法。 ST:#include #include #include #include #include #include using namespace std; const int maxn = 10010; int t, n, cnt; vector son[maxn]; int parent[maxn]; bool vi

~飞呀,飞~ 887

Nearest Common Ancestors poj 1330 LCA转RMQ

题目大意随便读题分析对有根树T进行DFS,将遍历到的结点按照顺序记下,我们将得到一个长度为2N – 1的序列,称之为T的欧拉序列F每个结点都在欧拉序列中出现,我们记录结点u在欧拉序列中第一次出现的位置为pos(u)根据DFS的性质,对于两结点u、v,从pos(u)遍历到pos(v)的过程中经过LCA(u, v)有且仅有一次,且深度是深度序列B[pos(u)…pos(v)]中最小的即LCA(T, u,

A_loud_name 513

POJ 1330 Nearest Common Ancestors LCA(在线RMQ,离线Tarjan)

最近公共祖先(Least Common Ancestor)的两种解决方式,在线RMQ算法和离线Tarjan算法,并且整理成为模板。

看曙光 1212

poj1330 Nearest Common Ancestors LCA倍增法 或 LCA转RMQ

Language: Default Nearest Common Ancestors Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 17123   Accepted: 9115 Description A rooted tree is a well-kno

AC_kereo的专栏 912

poj1330Nearest Common Ancestors LCA问题 dfs+rmq

题目意思很简单就是求两个节点的LCA,这个问题可以转化为rmq问题,求区间的最小值。 就是首先利用dfs遍历图的所有顶点并且每条边会遍历两次,这样遍历的顶点总共2*n-1个,依次将遍历的边存在数组e[i]中,并且记录每个顶点的深度, 存入数组level[i]中,我们再开一个数组存每一个顶点首次出现的下标,记录在idx中,这样任意给出两个顶点,我们求出他们对应的下标x,y,然后根据level数组...

weixin_30515513的博客 130

poj 1330 Nearest Common Ancestors lca 在线rmq

Nearest Common Ancestors Description A rooted tree is a well-known data structure in computer science and engineering. An example is shown below:In the figure, each node is labeled with an integer...

weixin_30244681的博客 102

Nearest Common Ancestors(POJ 1330 LCA RMQ在线算法模板)

Nearest Common AncestorsTime Limit: 1000MS Memory Limit: 10000KTotal Submissions: 33158 Accepted: 16839DescriptionA rooted tree is a well-known data structure in computer science and engineering. An e...

残阳止水 206

POJ 1330 Nearest Common Ancestors LCA--》RMQ or 纯DFS

Nearest Common Ancestors Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 22446   Accepted: 11720 Description A rooted tree is a well-known data structure in

MY Blog 593

POJ 1330 Nearest Common Ancestors【LCA_(rmq 在线 + tarjan 离线)】

题意: 给出一颗有 n 个节点的树,问u 和 v 的最近公共祖先。 分析: rmq:对树先进行深搜,记录深搜序列和每个序列的深度,将最近公共祖先的询问转化为区间最值问题。 tarjan:保存所有询问,在深搜的时候同时保存答案。 rmq_在线算法 #include<stdio.h> #include<string.h> #includ...

weixin_33860147的博客 97

LCA 最近公共祖先 小结

LCA 最近公共祖先 小结 以poj 1330为例,对LCA的3种常用的算法进行介绍,分别为 1. 离线tarjan 2. 基于倍增法的LCA 3. 基于RMQ的LCA 1. 离线tarjan /*poj 1330 Nearest Common Ancestors 题意: 给出一棵大小为n的树和一个询问(u,v), 问(u,v)的最近公共祖先。 限制: 2 <= n

whai的专栏 664
上一篇: hdu-6130-Kolakoski
下一篇: (转载)趣写算法系列之--匈牙利算法
Bigdz
博客等级 码龄10年 10粉丝 33原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值