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

DESeq2实战:如何用LRT检验分析基因表达随时间变化的模式(附完整代码) 本文详细介绍了如何使用DESeq2中的LRT检验分析基因表达随时间变化的模式,包括实验设计、数据预处理、模型构建、结果提取与可视化等完整流程。通过实战案例和完整代码,帮助生物信息学研究者掌握时间序列RNA-seq分析的核心技术,特别适合需要快速上手的实践者。 阅读详情

题目传送门: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;
}







Python实战:打造学生信息管理系统 通过本教程,我们构建了一个简单的学生信息管理系统,实现了基本的添加、删除、修改和查询功能。当然,这个系统还有很多可以改进和扩展的地方,比如添加用户界面、增加数据持久化功能、支持批量操作等。简介:本文将介绍如何使用Python编写一个功能齐全的学生信息管理系统,包括添加、删除、修改和查询学生信息的基本操作。学生信息管理系统是学校日常管理中不可或缺的一部分,它能够帮助管理人员快速、准确地管理学生信息,提高工作效率。为了实现上述功能,我们可以设计一个包含学生信息的字典,并使用函数来封装各个操作。 阅读详情

相关推荐

Ubuntu双系统开机黑屏?3分钟搞定NVIDIA显卡驱动冲突(18.04/20.04实测有效)

本文详细解决Ubuntu双系统开机黑屏问题,特别是由NVIDIA显卡驱动冲突引起的故障。提供从临时进入系统到永久安装专有驱动的完整方案,适用于Ubuntu18.04/20.04用户,帮助快速恢复系统并优化显卡性能。

resnet7explorer的博客 309

POJ 1330 LCA转RMQ模板题

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

crazy_石头的专栏 986

从高德、百度地图下载POI数据?用这个工具5分钟搞定GCJ02/BD09到WGS84的坐标纠偏

本文详细解析了高德、百度地图POI数据坐标偏移问题,并提供了从GCJ02/BD09到WGS84的高效转换方案。通过开源工具如coordtransform和ArcGIS等专业软件,实现毫米级精度的坐标纠偏,适用于商业选址、GIS分析等场景,显著提升数据准确性和工作效率。

weixin_26789847的博客 450

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

7-1 链式基数排序 (20 分)

7-1 链式基数排序 (20 分) 实现链式基数排序,待排序关键字n满足1≤n≤1000,最大关键字数位≤5。 输入样例: 第一行输入待排序个数n(1≤n≤1000),再输入n个数(n的数位≤5)。 10 278 109 63 930 589 184 505 269 8 83 输出样例: 输出每趟分配-收集后链表中的关键字,趟数为序列中最大值的数位(如样例中930的数位为3),每行结尾有空格。 930 63 83 184 505 278 8 109 589 269 505 8 109 930 63 26

OwemShu的博客 4238

合泰单片机HT32之keil5开发环境搭建(一)

1. 前言 这两天在准备合泰杯,但是总是感觉无从下手,因为合泰单片机的资料教程什么的非常少,不像stm32那样。而且听说要用合泰单片机的专用IDE,感觉当场被劝退了。后来经过查找资料,发现合泰单片机也有keil5的支持包,也就是说可以从库函数进行开发,不用从寄存器进行开发,但我找了好久,并没有找到教程,后来实在没办法,打算自己动手搭建环境,经过了大概两天的挣扎后,终于成功地搭建好了环境,也成功地点...

weixin_44713763的博客 8669

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

CH341的I2C流模式(StreamI2C)到底怎么用?从EEPROM读写到自定义设备,一篇讲清参数配置逻辑

本文详细解析了CH341的I2C流模式(StreamI2C)的使用方法,从EEPROM读写到自定义设备的参数配置逻辑。通过深入分析I2C协议基础、StreamI2C参数映射关系及典型设备配置示例,帮助开发者快速掌握StreamI2C的应用技巧,解决实际开发中的常见问题。

weixin_30932215的博客 448

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

基于STM32的工业I/O模块硬件电路实现

深入解析基于STM32的工业I/O模块硬件电路实现,涵盖关键电路设计与信号处理,突出硬件电路稳定性和工业级可靠性,适合嵌入式开发者参考。

weixin_35835018的博客 455

【nnUNetv2进阶】四、nnUNetv2 魔改网络-小试牛刀-加入注意力机制ChannelAttention

本文介绍了在nnunet中加入ChannelAttention的方法,按照本文教的教程,可以快速完成ChannelAttention的加入和自定义模型的跑通。

AI爱好者的博客,分享计算机领域相关知识 5801

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

UG二次开发GRIP刻字

UG二次开发GRIP刻字

qq285503851的博客 1138

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

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

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

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

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

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

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、付费专栏及课程。

余额充值