poj 1986 Distance Queries(LCA)

POJ.1986 Distance Queries ( LCA 倍增 ) POJ.1986 Distance Queries ( LCA 倍增 )题意分析给出一个N个点,M条边的信息(u,v,w),表示树上u-v有一条边,边权为w,接下来有k个询问,每个询问为(a,b),求a,b两点到lca(a,b)的边权之和为多少。倍增维护树上前缀和,求得LCA之后,相应做差即可。代码总览#include <cstdio> #include <algorithm> #include < 阅读详情


poj 1986 Distance Queries


和此题一样


#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
using namespace std;
#define MAXN 40005

struct tnode
{
    int v,d;
    tnode(int v=0,int d=0):v(v),d(d){}
};
struct qnode
{
    int v,id;
    qnode(int v=0,int id=0):v(v),id(id){}
};
struct qqnode
{
    int u,v,anc;
    qqnode(int u=0,int v=0):u(u),v(v){}
}qq[MAXN];
vector<tnode> t[MAXN];
vector<qnode> q[MAXN];
int dis[MAXN],fa[MAXN];
bool vis[MAXN];
int n,m;

void ini()
{
    for(int i=0;i<=n;i++)
    {
        t[i].clear();
        q[i].clear();
        fa[i]=i;
        vis[i]=false;
    }
}
int find(int x) {return x==fa[x]?x:fa[x]=find(fa[x]);}
void lca(int u)
{
    vis[u]=true;
    for(int i=0;i<q[u].size();i++)
    {
        int v=q[u][i].v;
        if(vis[v])
            qq[q[u][i].id].anc=find(v);
    }
    for(int i=0;i<t[u].size();i++)
    {
        int v=t[u][i].v;
        if(!vis[v])
        {
            dis[v]=dis[u]+t[u][i].d;
            lca(v);
            fa[v]=find(u);
        }
    }
}
int main()
{
    int x;
    char op[3];
    while(scanf("%d%d",&n,&x)!=EOF)
    {
        ini();
        int u,v,d;
        for(int i=0;i<x;i++)
        {
            scanf("%d%d%d%s",&u,&v,&d,op);
            t[u].push_back(tnode(v,d));
            t[v].push_back(tnode(u,d));
        }
        scanf("%d",&m);
        for(int i=0;i<m;i++)
        {
            scanf("%d%d",&u,&v);
            qq[i]=qqnode(u,v);
            q[u].push_back(qnode(v,i));
            q[v].push_back(qnode(u,i));
        }
        dis[1]=0;
        lca(1);
        for(int i=0;i<m;i++)
            printf("%d\n",dis[qq[i].u]+dis[qq[i].v]-2*dis[qq[i].anc]);
    }
    return 0;
}


在overleaf中使用bibtex引用参考文献 最近在挑选写tex的平台,挑来挑去,个人感觉overleaf给我带来的体验感是最舒适的。不过由于对内部的文件组织和make进行了一层封装,所以与一般的本地平台编译tex会有一点不同。此处写一下在overleaf中使用bibtex的方法。 在tex中使用bibtex引用文献是一件很舒适的事,毕竟这是tex的优点之一(要是tex比word难用,我干什么不去用word,hhh) 第一步,我们创建一个.bib文件,名字随便起,我这边起为reference.bib。 然后打开谷歌学术,搜索你想要引用的文章,并找到 阅读详情

相关推荐

CAD图纸智能搜索三大突破:图纸秒搜技术、相似度匹配与AI语义搜索

CAD图纸作为核心资产,长期面临管理难题:传统全文检索需逐张打开图纸人工查找,效率低下;相似图纸匹配依赖人工比对,误差率高;非专业人员难以通过模糊描述精准定位图纸。针对这些问题,唯杰地图推出三项智能解决方案:一是基于现代化索引引擎的​​全文搜索​​,支持秒级检索图纸内的文字、图层、块名称等,并可多条件组合查询;二是​​相似度搜索​​,通过SIFT算法和深度学习提取几何特征与拓扑结构,实现高精度匹配;三是​​AI语义搜索​​,利用大模型解析自然语言指令(如“查找半径为10的红色圆”),直接定位目标图形。

vjmap的博客 1868

poj 1986 Distance Queries(LCA:倍增/离线)

计算树上的路径长度。input要去查poj 1984。 任意建一棵树,利用树形结构,将问题转化为u,v,lca(u,v)三个点到根的距离。输出d[u]+d[v]-2*d[lca(u,v)]。 倍增求解: 1 #include<cstdio> 2 #include<cstring> 3 #include<queue> ...

aizhengcuo9261的博客 237

2017全国大学生电子设计大赛B题 | 板球控制系统(四)机械设计相关

转载请注明出处。   转眼2019了诶,可能有些同学又该问了,哇向阳哥,你这个鸽子放的好,转眼大半年了一年都没更新,我也知道啊,说好的源码呢,挖的机械的坑呢?咕咕咕咕我也不想啊,我这不是懒吗!过年有空了,又到了收红包泡妹子玩游戏.......呸,学习准备比赛码代码的时候了,终于有点空闲,于是乎今晚先把机械的大坑填了。     咱话先说在最前面。机械这玩意,靠经验,也考想象力,更要命的还是出了...

王向阳的博客 3万+

POJ1986 Distance Queries

查询两点间路径长,就是把两点间路径split出来,输出splay根上的值。在点上维护以之为根的splay子树上的点权和。将边当作虚点,连接到两个点。

SandwichBK的博客 217

【2025CVPR】基于脉冲神经网络的能效目标检测模型:Multi-scale Spiking Detector(MSD)深度解析

本文提出了一种创新的多尺度脉冲神经网络目标检测器(MSD),通过生物启发的ONNB模块和MSDF框架实现了高效准确的目标检测。该模型采用端到端直接训练策略,在COCO数据集上达到62.0%mAP的精度,同时仅需7.8M参数和6.43mJ能耗,较传统方法提升2.8%精度并降低82.9%能耗。实验验证了其在小目标检测和事件数据处理的优越性,为边缘计算应用提供了新范式。

hasakie的博客 1109

『言善信』Fiddler工具 — 1、Fiddler介绍与安装

文章目录1、Fiddler简介2、Fiddler功能3、Fiddler工作原理4、Fiddler安装 1、Fiddler简介 Fiddler是强大的抓包工具之一,它能记录所有客户端和服务器之间的HTTP和HTTPS请求,是web调试的利器。 Fiddler是位于客户端和服务端之间的HTTP代理,它的原理是以web代理服务器的形式进行工作的,使用的代理地址是:127.0.0.1,端口默认为8888,我们也可以通过设置进行修改。 Fiddler可以抓取支持HTTP代理的任意程序的数据包,如果要抓取https会

繁华似锦Fighting 1466

poj 1986(离线查询点对最近公共祖先)

题意:给一棵树,查询一些点对的距离 解法:随便找一个点建立有根树,然后转化为求点对最近公共祖先问题。两点的距离等于他们与最近祖先的距离和。查询的方法是dfs+并查集离线查询。思想是,dfs过的为回溯的点的parent全部指向自己本身,vis标记为true。回溯之后的点parent指向自己的父亲。然后dfs每进入一个点,就处理这个点相关的查询,如果其中某个查询另一个点v的vis为true,

xiefubao的专栏 988

高速设计注意事项总结——MDI篇

在以太网高速通信系统中,MDI(Medium Dependent Interface,介质相关接口)是连接物理层芯片(PHY)与传输介质(如网线)的关键接口,其设计直接影响信号完整性、传输速率和抗干扰能力。本文围绕 MDI 及 RJ45 接口电路、关键参数、设计与布线要点展开,为高速以太网设计提供参考。本文包含MDI 及 RJ45 接口电路组成、电路设计注意事项、布局布线要求等内容

qq_16237389的博客 1445

POJ1986 Distance Queries (tarjan算法LCA 模板题)

题目 : http://poj.org/problem?id=1986 求最近公共祖先的tarjan 算法。 离线算法、时间复杂度为O(n) 基本框架 : 先用随便一种数据结构(链表就行),把关于某个点的所有询问标在节点上,保证遍历到一个点,能得到所有有关这个节点LCA 查询 建立并查集.注意:这个并查集只可以把叶子节点并到根节点,即getf(x)得到的总是x的祖先

Dewey's blog 931

感应加热电源设计避坑指南:半桥LC串联谐振的5个关键问题

本文深入解析半桥LC串联谐振在感应加热电源设计中的5个关键问题,包括均压电阻选型、功率管驱动时序、谐振频率补偿等实战经验。通过真实故障案例和解决方案,帮助工程师避开常见设计陷阱,提升电路稳定性和效率,特别适合从事桥感应加热电源开发的工程师参考。

weixin_27013291的博客 510

使用 Python 构建 Reddit 热帖爬虫:抓取热门讨论帖和评论

在现代互联网中,Reddit 被誉为全球最大、最活跃的讨论平台之一,汇聚了各种主题的帖子、评论和社交互动。因此,抓取 Reddit 上的热门帖子和评论可以为我们提供一个丰富的文本数据源,可以用于情感分析、话题建模、趋势分析等应用。Reddit 提供了官方的 API,可以让开发者获取包括帖子、评论、用户信息等在内的各种数据。我们可以结合上述方法,抓取多个热门帖子,并将每个帖子的标题、作者、发布时间和评论内容保存到一个数据结构中。每个帖子的对象包含了丰富的信息,如标题、内容、发布时间、作者等。

2201_76125261的博客 382

【POJ1986】Distance Queries-LCA算法

【POJ1986】Distance Queries-LCA算法

Maxwei_wzj的OI世界 405

KingSCADA3.8保姆级安装教程

大家好,我是雷工!最近开始学习KingSCADA,今天这篇详细记录安装KingSCADA3.8的过程。首先下载需要的安装版本,此处以从官网下载的最新版本KingSCADA3.8为例,双击:Setup.exe;

做有价值的事,积累有价值的笔记! 1万+

POJ - 1986 Distance Queries (Tarjian求LCA)

POJ - 1986 Distance Queries 题目 给出 n 各点,m条边,q次询问,问两点最短距离。 分析 数据的特殊性,可以看出是一个树,直接Tarjian求Lca即可。不过要注意存图的时候按双向图存,之后转有根树,dfs 时多判断一下不能重复访问父亲节点。 代码 #include <cstdio> #include <iostream> #include &...

Stormjing的博客 306

SAP B1中文培訓教材_SDK

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

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

POJ 1986 Distance Queries(查询两点距离,LCA)

题目链接: POJ 1986 Distance Queries 题意: 给一个连通的nn个节点的树,有QQ次查询,每次输出两点间距离。 数据范围:n≤40000n\leq 40000 分析: 先用基于RMQ算法的求LCA的方法求出LCA。记dis[i]dis[i]为根节点到ii节点的距离,那么uu和vv之间的距离就是: Ans=dis[u]+dis[v]−2∗dis[LCA(

ramay7 901

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

POJ 1986 Distance Queries LCA

http://poj.org/problem?id=1986 Farmer John's cows refused to run in his marathon since he chose a path much too long for their leisurely lifestyle. He therefore wants to find a path of a more reasona...

xiji333的博客 230

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

poj1986 Distance Queries(lca又是一道模版题)

题目链接:http://poj.org/problem?id=1986 题意:就是老问题求val[u]+val[v]-2*val[root]就行。还有这题没有给出不联通怎么输出那么题目给出的数据一定 是联通的。 题解:就是单纯的lca。 #include <iostream> #include <cstring> #include <...

awow80285的博客 218

POJ 1986 Distance Queries(在线LCA)

转载请注明出处,谢谢http://blog.youkuaiyun.com/ACM_cxlove?viewmode=contents    by---cxlove 题目:一棵树,两个点之间的路径 http://poj.org/problem?id=1986  我只是为了SPOJ COT来做一下LCA的。。。 在线的LCA就是,先搞出一个欧拉序列 然后RMQ中间部分,其实就是a到lca(a,b)

窝不是爱酱,喵~~~~ 2941

POJ1986,Distance Queries(LCA)

这道题可以用LCA做出来,虽然最短路可以做出来,但是询问次数很多,每询问一次就求一次最短路的话,时间开销是很大的。 这里我是用LCA转化为RMQ求出来,需要注意的一点就是题所给的图可能不是连通的,所以在DFS的时候要稍作改变。 #include<cstdio> #include<algorithm> #include<cstring> #include<a...

shamansi99的博客 220

poj 1986 Distance Queries (LCA)

题目链接:   poj 1986 题目大意:   给出一棵树,求a—b路径的长度 解题思路:   与hdu 2874类似                   LCA离线查找最近公共祖先                   dist[ ]求距离: 距离=dist[ a ] + dist[ b ] — 2*dist[ LCA(a,b) ] 代码: //Final LCA离线 查找两点最

ンZee的解题报告 1475

[POJ 1986] Distance Queries (LCA)

Distance Queries LCA问题: http://www.cppblog.com/Icyflame/archive/2009/07/04/88987.html Tarjin (离线算法) http://hi.baidu.com/billdu/item/9938ed34ab9416352e20c41f DFS + RMQ (在线算法)

SIOFive的专栏 924

POJ - 1986 Distance Queries (LCA)

POJ - 1986 题目 思路:tarjan求两个叶子结点间距离,这题莫名tle,后来发现是因为初始化手抖了一下,但是还是没发现为何tle。 #include #include #include #include #include #include #include using namespace std; //#pragma comment(linker, "/STACK:1

shinimashzi 272

Poj 1986 Distance Queries【LCA】

Distance Queries Time Limit: 2000MS   Memory Limit: 30000K Total Submissions: 11686   Accepted: 4131 Case Time Limit: 1000MS Description Farmer John's cows refused

希望的专栏 503

POJ - 1986 Distance Queries 倍增求LCA

题意还是很有病的,说了半天后边的方向都没用的,意思就是跟样例一样求两点间的距离,裸的LCA 两个点x,y的距离=dis[x]+dis[y]-2*dis[LCA(x,y)]; 三个点x,y,z的距离=dis[x]+dis[y]+dis[z]-dis(lca(x,y))-dis(lca(y,z))-dis(lca(x,z)); 倍增的思想是感觉跟RMQ很像,就是首先建数存路径与各节点深度,首先来...

swust5120171204的博客 233

【POJ】 1986 Distance Queries 离线LCA

Distance Queries Time Limit: 2000MS   Memory Limit: 30000K Total Submissions: 8694   Accepted: 3052 Case Time Limit: 1000MS Description Farmer John's cows refused to r

poursoul 1266

POJ1986 Distance Queries(树链剖分LCA)

个人认为是树链剖分求lca的基本题目,当然其他方法也可以做。 大意:给出一棵n个节点的树,k(1<=k<=10000)个询问,每次询问树上两点的距离(每条道路后面输入的那个字母根本没什么卵用) 首先预处理每个节点i到根节点的距离,然后dis(i,j)=dis(i,root)+dis(j,root)−2∗dis(lca(i,j),root)dis(i,j)=dis(i,root)+dis(j,ro

ACMer_quack&cheer 701
上一篇: poj 1470 Closest Common Ancestors(LCA)
下一篇: hdu 2874 Connections between cities(LCA)
yjCola
博客等级 码龄14年 4粉丝 138原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值