hdu 2586 最近公共祖先

深入解析Gerber RS274X文件格式:从基础语法到实战应用 本文深入解析PCB制造的核心标准Gerber RS274X文件格式,详细介绍了其基础语法、坐标系统、功能码以及嵌入式光圈定义等关键特性。通过实战案例演示了如何解析和手写Gerber指令,并总结了常见错误与调试技巧,帮助PCB工程师掌握这一与制造工厂沟通的“通用语言”,确保设计准确无误地转化为实体电路板。 阅读详情
题目链接

题意


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;
}
RouterOS网桥VLAN实战:从零构建安全隔离的二层虚拟网络 本文详细讲解了如何在RouterOS上利用网桥和VLAN功能,从零开始构建安全隔离的二层虚拟网络。通过分步实战演示,涵盖核心概念、网桥创建、PVID设置、VLAN规则配置及安全过滤,帮助网络管理员实现办公、访客与服务器网络的逻辑隔离与灵活管理,提升网络安全性。 阅读详情

相关推荐

Linux下CUDA 11.8与vllm的完美搭配:从环境配置到避坑指南

本文详细介绍了在Linux系统中为CUDA 11.8环境部署vLLM的完整实战指南。针对cu118与vLLM的版本兼容性核心问题,提供了从Python、PyTorch版本选择,到关键依赖vllm-nccl-cu11的安装避坑,以及环境调优、生产级容器化部署的全面解决方案,帮助开发者高效构建稳定的大模型推理服务。

weixin_29095049的博客 308

最近公共祖先-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

BMS开发避坑指南:如何用ADBMS6815实现0.03%精度的电池采样?

本文深入解析了如何利用ADBMS6815等高精度AFE芯片,在车规级BMS开发中实现0.03%级别的电池电压采样精度。文章从芯片选型、硬件设计、软件配置、算法优化到系统验证,提供了一套完整的实战指南,帮助工程师系统性地提升BMS测量精度,从而保障电池安全、延长寿命并增强产品竞争力。

weixin_28314575的博客 134

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

Coze平台智能体开发实战:打造测试工程师的AI助手

智能体是具备特定身份和能力的AI实体,由大语言模型(LLM)驱动,并通过插件、知识库和工作流扩展其能力。明确的角色定位:可以设定特定身份和专业领域扩展能力:通过插件连接外部工具和服务记忆能力:通过知识库存储和检索专属信息流程化处理:通过工作流执行复杂多步任务通过Coze平台创建测试工程师智能体,可以显著提升测试效率和质量。明确的角色定位:聚焦测试工程师的实际需求丰富的知识库:提供准确的领域知识支持合适的工具集成:通过插件连接现有工具链持续迭代优化:根据反馈不断改进智能体行为自动化测试生成。

hogwarts_beibei的博客 1005

Unreal5(虚幻五) 实现UI与C++代码逻辑的交互 保姆级教程

本人有Unity基础,刚学UE几天,把这一套处理流程记录一下备用。

qq_42915442的博客 9816

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

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

追梦赤子心 1053

Win11右键菜单显示更多选项设置默认展开方法

在Windows 11操作系统中,用户可能会发现右键点击桌面空白处时,弹出的菜单中仅显示“显示更多选项”,而并非直接展示所有可用的选项。这对于希望快速访问特定功能的用户来说,无疑增加了一些不便。为了优化这一体验,本文将介绍两种简单的方法,帮助用户设置Win11右键菜单,使其默认展开包含的所有选项。通过上述两种方法,用户可以轻松地将Win11右键菜单设置为默认展开所有选项,从而提高工作效率和便捷性。希望这篇文章对你有所帮助!

nntxthml的博客 1万+

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

智慧城市中的CV:交通流量监控与行人检测

智慧城市中的CV:交通流量监控与行人检测 ,人工智能,计算机视觉,大模型,AI,计算机视觉作为人工智能的重要分支,通过分析和理解图像或视频数据,为智慧城市提供了强大的感知能力。在交通管理领域,计算机视觉技术可实现交通流量监控、行人检测、违章行为识别等功能,助力构建高效、安全、绿色的城市交通系统。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 5万+

详解vit_base_patch16_224

ViT-Base模型的核心思想是将输入图像划分为多个小块(patches),并使用Transformer架构来处理这些小块。具体来说,ViT-Base使用16x16像素的patch大小,输入图像的尺寸为224x224像素,这意味着每张图像将被划分为49个patch(22416×22416=14×14=19616224​×16224​=14×14=196个patch)。ViT-Base(ViT-B/16)通过将图像处理任务转化为序列处理任务。

具身机器人和通用AI 3227

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

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

猿的进化 711

YOLOv11 改进 - 特征融合 | 小目标检测救星:DySample动态上采样减少特征丢失

本文介绍了超轻量且高效的动态上采样器DySample与YOLOv11的结合,以解决传统上采样器工作负载大、应用场景受限的问题。DySample从点采样角度构建上采样,绕过动态卷积,使用PyTorch标准内置函数实现,无需定制CUDA包,能大幅减少参数、FLOPs等资源消耗。我们将DySample代码集成进YOLOv11。实验脚本显示,结合DySample的YOLOv11在多个密集预测任务中或表现出色。

魔改工程师的博客 1416

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

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

F丶轩 708

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

最近公共祖先(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

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

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

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

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

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

余额充值