<lca 模板> 小机房的树

inferCNVpy分析流程学习 inferCNV的用途大家都已经很清楚了,接下来就走一下流程,试一试Python版的inferCNV。使用的数据集为:GSE188711,既往推文可见:Scanpy分析全流程(含harmonypy整合/细胞周期矫正/双细胞检测及去除)( 阅读详情

go to the problem

简单来说就是给你一个n个点的树,每一条边都有边权。询问有m次,每次给出两个点,求他们之间的最小边权和。
很容易想到用求树上前缀和和lca,先把两个点跳到高度相同的地方,再一直往上跳,直到两个点重合。因为一个点一个点的跳太慢了,所以我们倍增的跳来求lca。

这里有两个模板 。。。_(:з」∠)_

模板1
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;

int n,m,u,v,c,cnt;
int sum[50010],deep[50010],fa[50010][30],first[50010],next[100020];
struct maple{
    int f,t,d;
}Rode[100020];

void build(int f,int t,int d) //注意双向建边
{
    Rode[++cnt]=(maple){f,t,d};
    next[cnt]=first[f];
    first[f]=cnt;
}
void dfs(int f,int t,int d) // dfs处理出树
{
    deep[t]=deep[f]+1;
    fa[t][0]=f;
    sum[t]=d;
    for(int i=first[t];i;i=next[i])
       if(Rode[i].t!=f)
          dfs(t,Rode[i].t,d+Rode[i].d); 
}
void Done()  // 预处理倍增跳的fa
{
    for(int i=1;i<=log2(n);++i) 
       for(int j=0;j<=n;++j)
          fa[j][i]=fa[fa[j][i-1]][i-1]; // j往上跳2^i等同于fa[j][i-1]往上跳i-1步,这里与st表有细微区别 
}
int lca(int x,int y)
{
    if(deep[x]<deep[y]) swap(x,y); //确保x的深度大
    for(int i=log2(n);i>=0;--i) // 把x跳到与y深度相同的地方
    {
        if(deep[fa[x][i]]>=deep[y])
           x=fa[x][i];
    }
    if(x==y) return x;
    for(int i=log2(n);i>=0;--i)  //一起往上跳
       if(fa[x][i]!=fa[y][i])
         x=fa[x][i],y=fa[y][i];
    return fa[x][0];
}
int main()
{
    scanf("%d",&n);
    for(int i=1;i<n;++i)
    {
        scanf("%d%d%d",&u,&v,&c);
        build(u,v,c);
        build(v,u,c);
    }
    dfs(0,0,0);
    Done();
    scanf("%d",&m);
    while(m--)
    {
        scanf("%d%d",&u,&v);
        printf("%d\n",sum[u]+sum[v]-2*sum[lca(u,v)]);
    }
    return 0;
}
模板2
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
using namespace std;

int n,u,v,c,m;
int first[150010],next[150010],fa[150010][30],deep[150010],cnt;
int de[60000];
struct maple{
    int f,t,d;
}rode[150010];

void done(int f,int t,int v)
{
    fa[t][0]=f;
    deep[t]=deep[f]+1;
    de[t]=de[f]+v;
    for(int i=1;fa[t][i-1];++i)
       fa[t][i]=fa[fa[t][i-1]][i-1];
    for(int i=first[t];i!=-1;i=next[i])
      if(rode[i].t!=f)
         done(t,rode[i].t,rode[i].d);
}
void build(int f,int t,int d)
{
    rode[++cnt]=(maple){f,t,d };
    next[cnt]=first[f];
    first[f]=cnt;   
}
int lca(int x,int y)
{
    if(deep[x]<deep[y]) swap(x,y);
    if(deep[x]>deep[y])
    {
        int l=deep[x]-deep[y];
        for(int i=0;i<=20;++i)
            if(l>>i&1) 
              x=fa[x][i];
    }          
    if(x==y) return x;
    for(int i=log2(n);i>=0;--i)
        if(fa[x][i]!=fa[y][i]) 
           x=fa[x][i],y=fa[y][i];
    return fa[x][0];
}

int main()
{
    memset(next,-1,sizeof(next));
    memset(first,-1,sizeof(first));
    scanf("%d",&n);
    for(int i=1;i<n;++i)
    {
        scanf("%d%d%d",&u,&v,&c);
        build(u,v,c);
        build(v,u,c);
    }
    done(0,0,0);
    scanf("%d",&m);
    while(m--)
    {
        scanf("%d%d",&u,&v);
        printf("%d\n",de[u]+de[v]-2*de[lca(u,v)]);
    }
    return 0;
}
EtherCAT主站SOEM -- 15 -- CIA402伺服驱动器子协议 以上就是EtherCAT主站SOEM – 15 – CIA402伺服驱动器子协议的内容。有不明白的地方欢迎留言;有建议欢迎留言,我后面编写文档好改进。创作不容,如果文档对您有帮助,记得给个赞。 阅读详情

相关推荐

关于华为高斯数据库出现Invalid or unsupported by client SCRAM mechanisms定位解决的过程

最近公司有个新项目使用的是高斯数据库,因为我们的项目是直接从别的项目组拿来的,配置都是已经配好的,但是在放到正式环境上之后出现报错。起初我们以为是测试和正式的版本不一致,但是结果是版本一致的。最后这个问题搞了我们几个小时,都没法解决。

Curtisjia的博客 3178

【倍增求lca】小机房的树

2370 小机房的树 //讲真我觉得这题面有点恶心QAQ 大体思路:树上的最短路径一定经过两点lca, 预处理一个dis数组, 存每个点到根节点的距离, 两点(x, y) 之间的距离即为dis[x] + dis[y] - 2*dis[lca] ; 然后倍增求lca即可,dis数组在预处理每个点深度的时候一并处理 日常,“妙啊” 代码君qwq 1 #include<cma...

weixin_34318272的博客 137

海波龙(Oracle Hyperion)单点登陆问题记录

Oracle海波龙套件已经多年未更新,按Oracle官方文档实施单点登陆启用之后,SmartView工具通过专用链接方式无法登陆系统。 在抓包逆向分析之后 定位到HspSmartViewServlet类在执行以下代码时获得的ssotoken无效导致,在某大厂工作的时候曾通过在filter中截获请求的方式植入Attribute,保留账号密码并在单点程序中处理实现登陆。 但在完美世界的环境中...

cainiaoEzu的专栏 1970

小机房的树

小机房的树 题目描述 Description 小机房有棵焕狗种的树,树上有N个节点,节点标号为0到N-1,有两只虫子名叫飘狗和大吉狗,分居在两个不同的节点上。有一天,他们想爬到一个节点上去搞基,但是作为两只虫子,他们不想花费太多精力。已知从某个节点爬到其父亲节点要花费 c 的能量(从父亲节点爬到此节点也相同),他们想找出一条花费精力最短的路,以使得搞基的时候精力旺盛,他们找到你

Formiko的博客 564

1553B通信项目开发笔记(一)协议概述

最近接了个项目,需要用1553B协议通信,仅作为RT端口进行通信,控制器采用ARM 使用芯片为国产的BU61580芯片,功能和引脚和DDC的61580完全一致。

u010396127的博客 2万+

RPA与旅游与酒店行业自动化实战案例

1. 背景介绍 1.1 旅游与酒店行业的挑战 旅游与酒店行业是一个高度竞争的市场,企业需要不断提高服务质量、降低成本、提高效率以保持竞争力。在这个过程中,企业面临着诸多挑战,如客户需求多样化、市场变化快速、人力资源成本高昂等。为了应对这些挑战,企业需要寻求新的技术手段来提高运营效率。

AI天才研究院 615

CODEVS 2370小机房的树

题目描述 Description 小机房有棵焕狗种的树,树上有N个节点,节点标号为0到N-1,有两只虫子名叫飘狗和大吉狗,分居在两个不同的节点上。有一天,他们想爬到一个节点上去搞基,但是作为两只虫子,他们不想花费太多精力。已知从某个节点爬到其父亲节点要花费 c 的能量(从父亲节点爬到此节点也相同),他们想找出一条花费精力最短的路,以使得搞基的时候精力旺盛,他们找到你要你设计一个程序来找到这条路,...

DancingZ的博客 298

KUKA机器人在自动运行时,动作不流畅,每个点位都有停顿的解决办法

KUKA机器人在自动运行时,动作不流畅,每个点位都有停顿的解决办法

Robot_PLC_HMI_Automation 4577

Codevs 2370 小机房的树

传送 LCA的应用。 用Tarjan的方法来找最近公共祖先,dfs过程中求出当前节点到根节点的距离。 那么ans=dep[u]-dep[lca]+dep[v]-dep[lca];#include<iostream> #include<cstdio> #include<cstring> #include<cmath> #define LL long long #define M 750009

hjx 350

SAP GR(Group Reporting)合并报表内容及功能简介(五)-合并和抵消

随着合并和收购数量的显著增加,企业在全球经济中面临着诸多挑战。其中最常见的是法律实体与子公司之间缺乏透明度,导致无法以经济高效的方式对账法律实体与子公司之间的公司间交易,从而造成结算出现重大延迟。公司间匹配和对账功能允许用户在关账过程中进行早期分析,以避免公司间差异,并缩短关账时的延迟。公司间匹配和对账功能交易级别匹配和实时对账基于各种组织维度(如公司、利润中心和合并单位)的灵活建模自动差异解决。应用内通信和工作流。与公司间抵销集成。

weixin_43853754的博客 4400

【我的Android进阶之旅】异常: Problems reading data from Binary store in Local\Temp\gradlexxx.bin (exist: true)

一、异常描述 今天开个会议,电脑自动关机了,重启电脑之后,打开Android Studio,编译代码,就编译失败,如下所示:异常提示 : Caused by: java.lang.RuntimeException: Problems reading data from Binary store in C:\Users\000\AppData\Local\Temp\gradle6337489649031706149.bin (exist: true) Caused by: java.lang.Runtime

字节卷动 3822

【CodeVS 2370】小机房的树

算法标签:lca

forever_dreams的博客 317

量化 insider 爆料! 散户打板必亏?(打板必看!量化资金如何“隔日砸盘”收割散户)

量化开发 insider 爆料💥 散户追的涨停板📉,可能是机构故意做的陷阱!本文从技术视角拆解“涨停陷阱”,帮你看清市场真实逻辑🧠。

XiaoqiangClub的博客 451

codevs 2370 小机房的树 (lca)

学习了Tarjan求lca,结果是dep[u]+dep[v]-2*dep[lca]#include <stdio.h> #include <string.h>const int MAXN = 5e4+10; const int MAXQ = 8e4+10;int F[MAXN]; int getf(int x) { if(F[x] == -1) return x; return F[

梦幻的蔷薇色 355

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Devexpress16.2.6破解工具

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

codevs 2370 小机房的树(lca)

题目描述 Description 小机房有棵焕狗种的树,树上有N个节点,节点标号为0到N-1,有两只虫子名叫飘狗和大吉狗,分居在两个不同的节点上。有一天,他们想爬到一个节点上去搞基,但是作为两只虫子,他们不想花费太多精力。已知从某个节点爬到其父亲节点要花费 c 的能量(从父亲节点爬到此节点也相同),他们想找出一条花费精力最短的路,以使得搞基的时候精力旺盛,他们找到你要你设计一个程序来找到这条路

Loi_yuan的博客 664

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Codevs_P2370 小机房的树(LCA)

题目描述 Description 小机房有棵焕狗种的树,树上有N个节点,节点标号为0到N-1,有两只虫子名叫飘狗和大吉狗,分居在两个不同的节点上。有一天,他们想爬到一个节点上去搞基,但是作为两只虫子,他们不想花费太多精力。已知从某个节点爬到其父亲节点要花费 c 的能量(从父亲节点爬到此节点也相同),他们想找出一条花费精力最短的路,以使得搞基的时候精力旺盛,他们找到你要你设计一个程序来找到这条路,要

BeiYu 656

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

【codevs2370】小机房的树

输入描述 Input Description 第一行一个n,接下来n-1行每一行有三个整数u,v, c 。表示节点 u 爬到节点 v 需要花费 c 的精力。第n+1行有一个整数m表示有m次询问。接下来m行每一行有两个整数 u ,v 表示两只虫子所在的节点 输出描述 Output Description 一共有m行,每一行一个整数,表示对于该次询问所得出的最短距离。

没有听众的演讲 766

<学习笔记>KMP(MP)算法

*(ノ゚▽゚)ノ对方不想和你说话并且向你扔出了一个题。【题目】 luogu 3375 KMP字符串匹配题目描述如题,给出两个字符串s1和s2,其中s2为s1的子串,求出s2在s1中所有出现的位置。为了减少骗分的情况,接下来还要输出子串的前缀数组next。(如果你不知道这是什么意思也不要问,去百度搜[kmp算法]学习一下就知道了。)输入输出格式输入格式: 第一行为一个字符串,即为s1(仅包含大写字母

Loi_Mapleleaf的小池 764

线段树练习5

线段树练习 5 codevs 4927•闲话:今天调了一天的线段树,结果一下午一道题都没做QAQ,现在一看到代码就眼疼。。。感觉要很久才能恢复过来orz… 不过这个题对于线段树来说应该是个很好的模板题2333题面有n个数和5种操作: add a b c:把区间[a,b]内的所有数都增加c set a b c:把区间[a,b]内的所有数都设为c sum a b:查询区间[a,b]的区间和 ma

Loi_Mapleleaf的小池 603

<学习笔记>manacher算法

我是吐槽,你看不到我~~ (*/ω\*) lalala O(n)解决回文串问题

Loi_Mapleleaf的小池 444

codevs 3332 数列(矩阵快速幂)

go to the problem题目描述 Descriptiona[1]=a[2]=a[3]=1a[x]=a[x-3]+a[x-1] (x>3)求a数列的第n项对1000000007(10^9+7)取余的值。输入描述 Input Description第一行一个整数T,表示询问个数。以下T行,每行一个正整数n。输出描述 Output Description每行输出一个非负整数表示答案样例输入 S

Loi_Mapleleaf的小池 427

萌新的队列练习

***神奇的queue*** 其实就本人来说还是喜欢手打的2333,毕竟之前栈啊,队列啊什么都是手打的orz… 后来听说有个叫STL的神奇的东西,感觉世界观都崩塌了,说好的手打呢 所以就试着打了,下面贴代码2333~#include<iostream> #include<queue> using namespace std; queue<int>q; int main() { in

Loi_Mapleleaf的小池 424

codevs 2822 爱在心中(Tarjan 缩点)

go to problem题目描述 Description“每个人都拥有一个梦,即使彼此不相同,能够与你分享,无论失败成功都会感动。爱因为在心中,平凡而不平庸,世界就像迷宫,却又让我们此刻相逢Our Home。”在爱的国度里有N个人,在他们的心中都有着一个爱的名单,上面记载着他所爱的人(不会出现自爱的情况)。爱是具有传递性的,即如果A爱B,B爱C,则A也爱C。 如果有这样一部分人,他们彼此都相爱,则

Loi_Mapleleaf的小池 412

<最小生成树模板·kruskal> 村村通、繁忙的都市

kruskal 板子题

Loi_Mapleleaf的小池 397
上一篇: codevs 4650 破损的键盘(stl)
下一篇: <最短路模板> 热浪
Loi_Mapleleaf
博客等级 码龄10年 17粉丝 72原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值