![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
LCA
HT008_123
家人们点点关注叭
展开
-
小机房的树
你猜这是啥 裸的LCA 以dis数组为从根到当前节点的总距离 u,v的最小距离即为 dis[u]+dis[v]-2*dis[LCA(u,v)] 至于LCA的实现方法是Tarjan,不会的可以看我上篇BLOG!#include <cstdio>#include <iostream>using namespace std;const int maxm=501000;struct nod原创 2017-10-16 15:54:15 · 333 阅读 · 0 评论 -
商务旅行
传送门 SPFA超时妥妥的! N-1条边,树上找最短路,八成是LCA 用经过的点两两建立要查询的LCA,边权设为1. 就可以转化为小机房的树那个题目233#include <cstdio>#include <iostream>using namespace std;const int maxm=501000;struct node{ int net; int to;原创 2017-10-16 16:22:22 · 229 阅读 · 0 评论 -
P1967 货车运输(Tarjan做法)
传送门 这个问题叫做『最大瓶颈路径』 最大瓶颈路径一定存在于最大生成树中/反证法:如果最大瓶颈路径不存在与最大生成树中。 这些不在最大生成树中的边会和最大生成树形成环。 我们删掉环上最小的边,保留这一条边,会得到一棵新的更大的生成树。 这与原来那棵树是最大生成树矛盾了。 注意,最短路不一定在最小生成树上(如一个环的情况)现在问题转变为求树上两点的最小边权问题了。 很明显是从u->LC原创 2017-10-17 15:17:21 · 668 阅读 · 0 评论 -
运输计划
题目链接暴力分:贪心20,不写了。正解:二分二分最短的时间。 通过预处理求出每条航线的总时间。 二分一个时间。 是否存在一条边,减下它的时间让所有的大于mid的路,全部小于mid。如何找一条被重复经过的边?树上差分。 对于数组v V[起点,终点]+1,V[lca(起点,终点)]-=2 从i到他的父节点的路径被经过的次数即为i子树v的和。注意要用T原创 2017-10-23 16:52:01 · 260 阅读 · 0 评论 -
树剖求LCA
若不知道树剖是啥的,请参照我上篇博客。实现先对树进行树剖 如何求LCA 1:若u,v在一条重链上 那么深度小的点即为LCA 2:若二者不在一条重链上 假设deep[top[u]]>deep[top[v]] 那么我们可以令u=fa[top[u]],直到两者在一条重链上。//树剖求lca很短,只是预处理有点长int lca(int u,int v){ whil原创 2018-01-06 09:13:04 · 327 阅读 · 0 评论 -
Tarjan求LCA
我对Tarjan越来越崇拜了! 首先是最近公共祖先的概念(什么是最近公共祖先?):在一棵没有环的树上,每个节点肯定有其父亲节点和祖先节点,而最近公共祖先,就是两个节点在这棵树上深度最大的公共的祖先节点。换句话说,就是两个点在这棵树上距离最近的公共祖先节点。所以LCA主要是用来处理当两个点仅有唯一一条确定的最短路径时的路径。有人可能会问:那他本身或者其父亲节点是否可以作为祖先节点呢原创 2017-10-16 15:26:47 · 337 阅读 · 0 评论 -
[LNOI2014] LCA
题目描述:给出一颗树 根节点为 1 给出 M 个 询问 l r z 求∑ri=ldep[lca[i,z]]∑i=lrdep[lca[i,z]]\sum_{i=l}^{r}dep[lca[i,z]] dep为距离根节点的距离+1题目分析:暴力分一点不给差评! 思路来自黄学长 首先 考虑一种暴力 我们把 z 到根上的点全部打标记,对于 l 到 r 之间的点,向上搜索到第...原创 2018-04-01 08:03:37 · 264 阅读 · 0 评论 -
[AHOI2008] 聚会
题目描述:qwq。题目分析:求出3个点两两的LCA 有两个是相同的选另一个作为聚会地点 然后算距离 树剖LCA快的飞起qwq题目链接:BZOJ 1832Ac 代码:#include <cstdio>#include <iostream>#include <algorithm>#include <cs...原创 2018-04-09 18:48:15 · 234 阅读 · 0 评论 -
(SPOJ)QTREE - Query on a tree 系列 题解
1:QTREE 1简单描述: 多组数据,维护树上边权,资瓷询问路径最大边权以及修改某个边权. 分析: 简单的树链剖分,转化维护边权为点权,注意初始化#include <cstdio>#include <iostream>#include <algorithm>#include <cstring>const int inf=0...原创 2018-04-10 09:40:59 · 193 阅读 · 2 评论