hdu 2586 最近公共祖先

避坑指南:DDR4内存条Margin测试Fail?从Intel RMT工具到PCB Layout的完整排错思路 本文深入探讨了DDR4内存条在Margin测试中Fail的完整排错思路,从Intel RMT工具分析到PCB Layout优化。通过实战案例,详细解析了信号完整性问题的诊断与解决方案,包括拓扑结构影响、传输线参数优化及HyperLynx仿真验证,为硬件设计工程师提供了宝贵的避坑指南。 阅读详情
题目链接

题意


n个村子,被n-1个条边连接,每次询问u和v的最近距离。


解析


  1. 求u和v的到他们的最近公共祖先的距离即可。
  2. 基本算法
    1. 在线算法 倍增法
      每次询问O(logN)
      d[i] 表示 i节点的深度, p[j,i] 表示 i 的 2^j 倍祖先
      那么就有一个递推式子 p[j,i]=p[p[j,i-1],i-1]
      这样子一个O(NlogN)的预处理求出每个节点的 2^k 的祖先
      然后对于每一个询问的点对a, b的最近公共祖先就是:
      先判断是否 d[a] > d[b] ,如果是的话就交换一下(保证 a 的深度小于 b 方便下面的操作)然后把b 调到与a 同深度, 同深度以后再把a, b 同时往上调(dec(j)) 调到有一个最小的j 满足p[j,a]!=p[j,b] (a b 是在不断更新的), 最后再把 a, b 往上调 (a=p[0,a], b=p[0,b]) 一个一个向上调直到a = b, 这时 a or b 就是他们的最近公共祖先

相关知识

http://baike.baidu.com/link?url=CxXG3rjGTlknKSJg17LrHjD5EVnoIrG_9GtS5ejbRp1GPv0FiGC-rB53pEcrGYkTnWUVQyvCCOu23KIVTDl_W_

代码

#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
#include <algorithm>
#include <vector>
#include <cmath>
using namespace std;
const int INF=0x3f3f3f3f;
const int maxn = 40000+100;
typedef long long LL;
int parent[20][maxn], dis[maxn];
int dep[maxn];

vector<pair<int, int> >g[maxn];

void dfs(int u, int p, int d, int D) {
    parent[0][u] = p;
    dep[u] = d;
    for (int i=0; i<g[u].size(); i++) {
        if (g[u][i].first != p)
            dfs(g[u][i].first, u, d+1, D+g[u][i].second);
    }
    dis[u] = D;
}

void init(int V) {
    dfs(0, -1, 0, 0);
    for (int k=0; k+1 < 20; k++) {
        for (int v=0; v<V; v++) {
            if (parent[k][v] < 0)
                parent[k+1][v] = -1;
            else
                parent[k+1][v] = parent[k][parent[k][v]];
        }
    }
}

int lca(int u, int v) {
    if (dep[u] > dep[v])
        swap(u, v);
    for (int i=0; i<20; i++)
        if ((dep[v]-dep[u]) >> i & 1)
            v = parent[i][v];
    if (u == v)
        return u;
    for (int j=20-1; j>=0; j--) {
        if (parent[j][u] != parent[j][v]) {
            u = parent[j][u];
            v = parent[j][v];
        }
    }
    return parent[0][u];
}

int main() {
    int T;
    scanf("%d", &T);
    while (T--) {
        int n, m;
        memset(dis, 0, sizeof(dis));
        scanf("%d%d", &n, &m);
        for (int i=0; i<n-1; i++) {
            int u, v, w;
            scanf("%d%d%d", &u, &v, &w);
            g[u-1].push_back(make_pair(v-1, w));
            g[v-1].push_back(make_pair(u-1, w));
        }
        init(n);
        for (int i=0; i<m; i++) {
            int u, v;
            scanf("%d%d", &u, &v);
            int p = lca(u-1, v-1);
            printf("%d\n", dis[u-1]+dis[v-1]-2*dis[p]);
        }
    }
    return 0;
}
[VT虚拟化驱动] 定义类及初始化内存区域 文章目录前言框架整体流程图类的定义初始化内存区域本章代码 前言 为什么不用C而用C++呢? 在单核的情况下,用C还比较方便些,但在多核的情况下,每个核心都需要分配有对应的一个VMX区域,VMCS区域,MsrBitmap区域和栈空间,以及对应的初始化函数,如果使用安装DPC回调的方式在多核情况下进行初始化,只使用同一个初始化函数,当函数被多个CPU核心同时执行,会出现很多意想不到的的错误,我用自旋锁试了一下是依照各种错误,所以果断用C++了,把这些每个核心都需要一份的封装到一个类里 框架整体流程图 类的定义 阅读详情

相关推荐

eda、gnm、anm究竟是个啥?

eda:主成分分析 gnm:高斯网络模型 anm:各向异性网络模型

药研猿的博客 1243

最近公共祖先-hdu2586

链接 #include<bits/stdc++.h> using namespace std; #define gcd(a, b) __gcd(a,b) const long long mod = 1e9 + 7; const int maxn = 4e4 + 5; #define int long long vector<int> v[maxn]; vector<int> w[maxn]; int fa[maxn][31], cost[maxn][31], d

Phantom_matter的博客 189

使用 Claude Skills 构建专业级 AI Agent:技术实践指南

Claude Skills(也称)是一组基于文件系统的可重用资源包,为 Claude 提供特定领域的专业知识、标准化工作流程和最佳实践。与传统一次性 Prompt 不同,Skills 是持久化、自动触发、支持代码执行的智能模块。让 AI 真正理解并执行你的工作方式。Claude Skills 正在重新定义 AI 助手的边界——从“回答问题”升级为“执行专业工作的能力”。其可组合、可移植、高效、强大的特性,使其成为自动化重复任务、标准化工作流、提升团队效率的理想工具。未来已来。

weixin_44058951的博客 2226

hdu 4547 CD 最近公共祖先lcm (dfs+rmq)

问从一个目录到另一个目录的最短cd cd..次数 #include #include #include #include #include #include #include #include #include using namespace std; const int N=1e5+10; int n; int E[2*N],R[N]; int t=0; map mp; vector vec[

zjck1995的专栏 615

2023-07-04 Fast-Lio论文中公式(6)与BCH公式中近似雅可比公式的一致性推导

将(1)式代入(6)式,就有。

wmorries的博客 478

推荐算法之Thompson(汤普森)采样

如果想理解汤普森采样算法,就必须先熟悉了解贝塔分布。 一、Beta(贝塔)分布 Beta分布是一个定义在[0,1]区间上的连续概率分布族,它有两个正值参数,称为形状参数,一般用α和β表示,Beta分布的概率密度函数形式如下: 这里的Γ表示gamma函数。 Beta分布的均值是: 方差: ...

weixin_30508241的博客 4259

HDU 1330 Nearest Common Ancestors(求两个点的最近公共祖先)

POJ 1330 Nearest Common Ancestors (LCA 求两个点的最近公共祖先)

追梦赤子心 1053

ESP32 STA AP模式下,设备连接 ESP的AP 后无法上网,无法访问域名上网(或者Failed to enable NAPT)

ESP32 STA AP模式下,设备连接 ESP的AP 后无法上网,无法访问域名上网(或者Failed to enable NAPT)1.可能是ESP STA模式未成功连接到路由器,确保 STA 成功连接到外部网络。2.检查 STA 和 AP 的网络配置是否正确,避免子网冲突。3.ESP32的NAPT功能未正确启用,确保 menuconfig 中已启用 IP_NAPT。4.DNS服务器未正确配置。

qq_34885669的博客 1540

http://acm.hdu.edu.cn/showproblem.php?pid=2586&&How far away ?

Problem Description There are n houses in the village and some bidirectional roads connecting them. Every day peole always like to ask like this "How far is it if I want to go from house A to house B

pursuit的专栏 860

MediaPipe实战:从零构建人脸关键点检测应用

本文详细介绍了如何使用Google的MediaPipe框架从零构建一个实时人脸关键点检测应用。文章深入剖析了MediaPipe的三段式检测流水线,提供了Android平台的完整实战教程,包括环境配置、模型加载、摄像头集成、关键点绘制以及性能调优指南,帮助开发者快速实现高效、跨平台的人脸AR特效与交互功能。

weixin_29100927的博客 343

芯片硅前验证技术与驱动工程师实战指南

硅前验证是芯片开发流程中的关键环节,通过pre-silicon simulation等技术手段在流片前验证设计正确性。其核心技术包括软件仿真、FPGA原型验证和硬件仿真器解决方案,涉及Linux驱动开发、芯片架构理解和波形分析等核心技能。作为连接芯片设计与系统集成的桥梁,硅前验证能早期发现设计缺陷,节省数百万美元流片成本。以Cadence Palladium为代表的硬件仿真器,通过专用服务器系统实现比纯软件方案快100-1000倍的仿真速度,为驱动工程师提供完整的外设模型验证环境。掌握硅前验证技术可显著提升

weixin_42522857的博客 324

hdu6115 最近公共祖先+树的重心优化

传送门 题意:汉语题目,就不说了。 比赛时不知道每个子公司的办公室时多少,但是我估计这不多,所以大胆的试了一发,结果过了,惊喜中的惊喜。 问两个子公司的最短路,因为是一棵树,所以就是两点之间的路径长度,我们只知道每个子公司的办公室在哪,我是枚举每两个办公室之间的距离,输出最小的那对距离,因为给的树肯定是不规则的,所以我求了一次 树的重心,使得树的高度变低,然后利用最近公共祖先求解距离,因为树高

猿的进化 711

实战|mitmproxy+Playwright 拦截篡改Cloudflare验证流程,实现无感爬取(2026实测可用)

2026年对抗Cloudflare,别再死磕滑块、轨迹、算法。高伪装浏览器 + 中间层劫持篡改验证流程Playwright + mitmproxy = 无感过CF这篇是纯实战、无废话、可直接上线的方案。你只要把目标网站、cf_clearance填进去,就能跑通。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1284

【LCA最近公共祖先】HDU 2586 How far away ?

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2586

F丶轩 708

ssm框架搭建

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

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

最近公共祖先(lca) hdu 2586

hdu 2586How far away ? 题目大意:给定n-1条边构成一棵树,无向的;和m个询问,对于每一个询问按顺序回答。 结题思路:lca算法算出最近公共祖先,然后dis[u]+dis[v]-2*dis[father](father是u,v的最近公共祖先),小trick是在构造询问树的时候把权值设成询问对应的输入顺序 #include <iostream> #in...

weixin_30563917的博客 85

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

LCA(最近公共祖先)--tarjan离线算法 hdu 2586

HDU 2586 How far away ? Time Limit: 2000/1000 MS (Java/Others)Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 11320Accepted Submission(s): 4119 Problem Description There ...

weixin_30872671的博客 214

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

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

【HDU 2586】How far away?(最近公共祖先)

传送门:http://acm.hdu.edu.cn/showproblem.php?pid=2586 题意,求一棵树上任意两点的权值和。 分析:在没学最近公共祖先之前一直以为这是道最短路的题,学了最近公共祖先发现利用最近公共祖先去求解十分方便。拿到这个题最先的思路是用Tarjan求LCA的时候,当找到了LCA,用dis数组记录两个询问的点到LCA的距离,但是敲的过程中发现这样不好进行...

a5615024的博客 231

hdu 2586(最近公共祖先LCA)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2586 思路:在求解最近公共祖先的问题上,用到的是Tarjan的思想,从根结点开始形成一棵深搜树,非常好的处理技巧就是在回溯到结点u的时候,u的子树已经遍历, 这时候才把u结点放入合并集合中,这样u结点和所有u的子树中的结点的最近公共祖先就是u了,u和还未遍历的所有u的兄弟结点及子树中的最近公共祖先就

几百个教授的专栏 680

树的最近公共祖先——LCA poj1330 hdu2586

树的最近公共祖先问题,是指给定一棵youxianshu

ZT在努力 503

LCA最近公共祖先-- HDU 2586

题目链接 Problem Description There are n houses in the village and some bidirectional roads connecting them. Every day peole always like to ask like this "How far is it if I want to go from house A t...

weixin_30664539的博客 118

hdu 2586 最近公共祖先 LCA

最近公共祖先问题~~ 题目大意:一个村子里有n个房子,这n个房子用n-1条路连接起来,接下了有m次询问,每次询问两个房子a,b之间的距离是多少。 很明显的最近公共祖先问题,先建一棵树,然后求出每一点i到树根的距离dis[i],然后每次询问a,b之间的距离=dis[a]+dis[b]-2*dis[LCA(a,b)]; LCA(a,b)即是a,b的最近公共祖先。。 对于

LSS 620

最近公共祖先【模板题】【树上倍增】【HDU2586】

题目传送门 树上俩点之间的距离 1号点bfs出每个点的深度d【】数组,离1号点的距离dis数组 x, y 俩点的距离 等于 dis【x】+ dis【y】- 2 * dis【lca(x,y)】; 在bfs过程中 倍增数组 #include<iostream> #include<queue> #include<math.h> using...

谁是凶手1703 165

LCA最近公共祖先 hdu-2586

大致题意:一个城镇有n个房子,有n-1条双向路将n个房子连接起来,城镇中不会有环。每条路都有自己的长度,现在问你任意两个房子间的距离是多少。既然不会形成环,那我们可以任选一点作为根,“吊挂”起来形成一棵树。那任意两个房子间的距离就是这两个房子的最近公共祖先分别到达两个房子距离的和。我们先利用dfs将每个点到达根的距离都求出来,然后求A和B的距离就转换成(A和根部之间的距离 - 最近公共祖先和根部之...

zyy.cpp 的博客 425

HDU 2586 最近公共祖先 LCA在线算法

How far away ? Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 13294    Accepted Submission(s): 4974 Problem Description There are n ho

大咸鱼。。。 422

HDU 2586 How far away ? Tarjan 离线最近公共祖先

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2586裸的最近公共祖先代码:#include <bits/stdc++.h> #define sf scanf #define pf printfusing namespace std; const int maxn = 40000 + 50,maxnm = 200 + 5; int fa[maxn],v

SolarDomo的博客 414

HDU 2586 + HDU 4912 最近公共祖先

先给个LCA模板 HDU 1330(LCA模板) #include <cstdio> #include <cstring> #define N 40005 struct Edge{ int x,y,d,ne; }; Edge e[N*2],e2[N*2]; int be[N],be2[N],all,all2,n,m; bool vis[N...

weixin_33774615的博客 119
上一篇: hdu 2121 无固定根的最小树形图
下一篇: hdu 2888 二维线段树和二维ST模版
nielaishan
博客等级 码龄11年 7粉丝 94原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值