LCA
ModestCoder_
一个modest的coder
展开
-
【题解】LuoGuU67748:坤链剖分
原题传送门题目大意:一颗n个节点的树,m个询问(u,v),每次输出经过了u到v的最短路径的坤链的条数。首先可以发现的是每个叶子借点都对应着一条坤链。30%暴力,对于每一个询问,把u到v的路径上的边打标记,从根节点开始遍历每一条坤链,遍历到叶子节点结束,到叶子结点结束时统计该坤链是否经过了u到v的路径,若是,则统计入答案。20%链的情况,送分,发现整棵树只有一个叶子节点,所有只有一条坤链,且该链一定经过任意一条路径,所以对于每个询问,都只要输出1即可。20%每个询问的两个端点的lca是根节点的原创 2020-11-03 21:33:57 · 116 阅读 · 0 评论 -
【题解】牛客206091:小王子
原题传送门一个正确的暴力思路是遍历树,然后对于每个点,把它和它父亲之间的边断掉。那就看看,边集E2E2E2中有多少条把两个连通块联通的,记条数为cntcntcntcnt=0cnt=0cnt=0,说明E2E2E2中每一条边都可以选择,答案累加mmmcnt=1cnt=1cnt=1,那就只能断掉那一条边,答案累加1cnt>1cnt>1cnt>1,没有边可以断如何统计这个cntcntcnt?可以暴力并查集,但是我们可以树上差分对于一条E2E2E2中的边(u,v)(u,v)(u,v原创 2020-09-16 11:03:29 · 241 阅读 · 0 评论 -
【题解】BZOJ4719:[Noip2016]天天爱跑步
首先膜拜一下大牛 感谢大佬的这篇题解Description 小c同学认为跑步非常有趣,于是决定制作一款叫做《天天爱跑步》的游戏。?天天爱跑步?是一个养成类游戏,需要 玩家每天按时上线,完成打卡任务。这个游戏的地图可以看作一一棵包含 N个结点和N-1 条边的树, 每条边连接两 个结点,且任意两个结点存在一条路径互相可达。树上结点编号为从1到N的连续正整数。现在有个玩家,第个玩家的 起点...原创 2018-08-03 20:18:05 · 547 阅读 · 0 评论 -
【学习笔记】LCA
LCA,最近公共祖先 博主今天回顾了倍增和Tarjan,总共用了40min码了两个模板(至少有20min再找Tarjan模板的错误,下面会讲到)LuoGu模版题传送门还是先说一下lca的暴力算法:两个节点一步一步往上跳,跳到同一个地方为止。。 1、倍增 在暴力算法上优化 发现暴力的缺陷:一步一步往上跳太慢。所以我们想到最好能一次跳一大步先来看一个问题:给出一个数n,要求把n拆分...原创 2018-08-06 20:40:54 · 3434 阅读 · 0 评论 -
【题解】LuoGu3128:【[USACO15DEC]最大流Max Flow】【LCA+树上差分】
LCA+树上差分板子题 我们要统计每个点经过几次,也就是在每一条路径上,给路径上的点+1,所以我们此题用树上差分就可以很快得得到每个点经过的次数具体是这样的:假设一条u到v的路径,那么这条路径是u—>lca(u,v)—>v的,所以我们把u->lca(u,v)与lca(u,v)->v两条路径各自加一,也就是++power[原创 2018-08-01 20:45:07 · 334 阅读 · 0 评论 -
【题解】BZOJ4326:NOIP2015 运输计划【二分+LCA+树上差分】
题目描述公元 2044 年,人类进入了宇宙纪元。L 国有 n 个星球,还有 n?1 条双向航道,每条航道建立在两个星球之间, 这 n?1 条航道连通了 L 国的所有星球。小 P 掌管一家物流公司, 该公司有很多个运输计划,每个运输计划形如 :有一艘物流飞船需要从 ui 号星球沿最快的宇航路径飞行到 vi 号星球去。显然,飞船驶过一条航道是需要时间 的,对于航道 j,任意飞船驶过它所花费的...原创 2018-08-01 19:46:46 · 325 阅读 · 0 评论 -
【题解】LuoGu1967:NOIP2013货车运输
原题传送门 题目描述 A 国有 n 座城市,编号从 1 到 n,城市之间有 m 条双向道路。每一条道路对车辆都有重量限制,简称限重。 现在有 q 辆货车在运输货物,司机们想知道每辆车在不超过车辆限重的情况下,最多能运多重的货物。输入 第一行有两个用一个空格隔开的整数 n,m,表示 A 国有n 座城市和 m 条道路。 接下来 m 行每行 3 个整数 x、y、z,每两个整数之间用...原创 2018-08-13 21:28:41 · 268 阅读 · 0 评论 -
[题解]SP913:QTREE2
@LuoGu本题两个询问,dist询问是lca基本做法吧主要是kth询问其实也是lca,跟树剖一点关系也没有~先求一遍lca,可以知道kth的点在s->lca(s,t)上还是lca(s,t)->t上之后再倍增跑一边即可~Code:#include <bits/stdc++.h>#define maxn 10010using namespace std;s...原创 2019-04-02 20:43:03 · 236 阅读 · 0 评论 -
【题解】LuoGu2783:有机化学之神偶尔会做作弊
原题传送门没有思维难度的题目先把环缩成一个点然后重建图新图中求两点间距离当然是d[u]+d[v]−2d[lca]d[u]+d[v]-2d[lca]d[u]+d[v]−2d[lca]本题求的是点个数所以还要加一最后把答案用二进制输出Code:#include <bits/stdc++.h>#define maxn 50010using namespace std;s...原创 2019-08-14 12:35:21 · 184 阅读 · 0 评论