
树链剖分
Frozen_Guardian
已退役菜鸡Acmer
展开
-
CodeForces - 160D Edges in MST(思维+tarjan/树链剖分+线段树)
题目链接:点击查看 题目大意:给出一张 n 个点 m 条边组成的带权无向图,现在对于每条边来说,确定一下其分类: 一定是最小生成树上的边 可能是最小生成树上的边 一定不是最小生成树的边 题目分析:两种思路,一种是比较好想,但是写起来比较麻烦,还有点卡常,另一种是需要一定的思维,相应的实现起来也是比较简单 先说需要思维的方法,参考克鲁斯卡尔的实现方法,不难看出权值较大的边一定不可能有机会去替换掉权值较小的边,所以如果一条边可能出现在多个最小生成树上时,一定是可能会被其他同权值的边替换,所以在实现克鲁斯卡尔原创 2020-12-18 17:43:00 · 339 阅读 · 4 评论 -
CodeForces - 609E Minimum spanning tree for each edge(最小生成树+树链剖分+线段树/树上倍增)
题目链接:点击查看 题目大意:给出一张 n 个点和 m 条边组成的无向图,现在询问包含每一条边的最小生成树 题目分析:考虑求解次小生成树的思路: 求出最小生成树 ans 枚举每一条非树边 ( u , v ),然后删除树上 ( u , v ) 这条路径上的最大值,即此时生成树的答案变为 ans +w( u , v ) - mmax 选择次小的作为答案 所以在求出最小生成树后,对于每一条边来说,只需要求出路径上边权的最大值即可 可以用树剖+线段树硬写,因为本题是静态的一棵树,所以用树上倍增在时间复.原创 2020-11-18 16:29:15 · 306 阅读 · 2 评论 -
CodeForces - 1437G Death DBMS(AC自动机fail树上树链剖分建线段树/暴跳fail)
题目链接:点击查看 题目大意:给出 n 个模式串,每个模式串初始时的权值为 0,然后有 m 次操作: 1 i x:将第 i 个模式串的权值修改为 x 2 s:给出一个字符串 s,询问字符串 s 作为主串时,所有可以与其匹配的模式串中,权值的最大值 题目分析:记录一下第一次单切 div2 的 G 题吧,不知道是 cf 题目质量变捞了还是我变强了,比赛结束前 20 分钟看到 G 出的比 F 还多,反正在挂机也是无聊,就开了 G 题,发现就是 AC 自动机的裸题,写了一发暴跳 fail 的代码,交上去果不其原创 2020-10-28 10:23:48 · 587 阅读 · 0 评论 -
牛客多校7 - A National Pandemic(树链剖分+线段树)
题目链接:点击查看 题目大意:给出一棵树,再给出 m 次操作,每次操作分为三种类型,dist( x , y ) 代表点 x 和点 y 之间的距离: 1 pos val:将点 pos 位置的值增加 val ,将其余所有点 x的值,增加 val - dist( pos , x ) 2 pos:点 pos 位置的值与 0 取 min 3 pos:查询点 pos 位置的值 题目分析:参考博客:https://blog.youkuaiyun.com/tianyizhicheng/article/details/1077.原创 2020-08-03 03:19:14 · 351 阅读 · 0 评论 -
Gym - 101889I Imperial roads(最小生成树+树链剖分+线段树)
题目链接:点击查看 题目大意:给出一个由n个节点组成的无向图,现在给出m次询问,每次询问给出一组u和v,问若使用u-v这条边所能组成的最小生成树的权值是多少 题目分析:题意描述的很清楚,但当然不能直接根据题意模拟,因为肯定会超时。。一次Kruskal算法的时间复杂度是O(边数),如果进行m次的话,时间复杂度就是m*边数,两项都拉满的话也得1e10了,肯定是不行的,那么我们该怎么办呢?最小生成树...原创 2019-11-13 00:20:11 · 248 阅读 · 0 评论 -
HDU - 3966 Aragorn's Story(树链剖分+线段树)
题目链接:点击查看 题目大意:给出一棵由n个点组成的树,每个点都有一个权值,接下来有k次操作,每次操作分为下面几种类型: I u v x:将u-v这条路径上的所有点权值加上x D u v x:将u-v这条路径上的所有点权值减去x Q x:查询点x的权值 题目分析:因为又涉及到了树上路径的问题,这个题涉及到的是路径上的点权修改,很容易和线段树的区间修改联想到一起,所以我们还是先剖一下,剖完之...原创 2019-11-10 01:40:19 · 291 阅读 · 0 评论 -
SPOJ - QTREE Query on a tree(树链剖分+线段树)
题目链接:点击查看 题目大意:给出一棵由n个点组成的树,再给出数个操作,每次操作分为下列几种类型: QUERY x y:询问点x-点y这条路径上的所有边权的最大值 CHANGE x y:将第x条边的权值改为y DONE:退出操作 题目分析:做做板子题练练代码熟练度吧,起码模板能够熟练默写后,再写树链剖分的函数就不太会犯低级错误了 回到这个题目上,因为是查询点x-点y这条路径上的最值,不难...原创 2019-11-10 02:52:13 · 276 阅读 · 0 评论 -
HDU - 6393 Traffic Network in Numazu(线段树+LCA+树链剖分+并查集)
题目链接:点击查看 题目大意:给出一个由n个点和n条边组成的图,每条边都有权值,题目保证图是连通的,然后给出m个询问,每次询问分为两种形式: 0 x y:将第x条边的权值修改为y 1 x y:查询x-y这条路径上的权值和 题目分析:因为这个题目故意给的是n个点和n条边,所以我们可以发现这一定是一个有环的图,如果n个点和n-1条边组成一棵树的话会多出一条边来,那么先让他多出来不要管,至于怎么求...原创 2019-11-09 01:56:44 · 264 阅读 · 0 评论 -
计蒜客 - Distance on the tree(树链剖分+离线处理+线段树)
题目链接:点击查看 题目大意:给出一颗含有n个节点的树,每条边都有权值,现在给出m个询问,每次询问的格式为u,v,w,我们需要求出在路径u-v上,边权小于等于w的边的个数 题目分析:因为一开始不会主席树,所以就选择了线段树+离线处理,因为边权比较难处理,我就选择将边权映射到点权上,这样就将问题转换成了求u-v这条路径上权值小于等于w的点的个数了,因为涉及到了u-v这条路径,我们需要先将这条链拿...原创 2019-11-07 23:37:04 · 306 阅读 · 0 评论 -
POJ - 1330 Nearest Common Ancestors(树上倍增/树链剖分求LCA)
题目链接:点击查看 题目大意:给出一棵有根树,我们需要求出两个点的lca 题目分析:因为题目说了是有根树,所以我们在建图的时候直接建有向图就好了,并且记录一下每个点的入度,建完图后找一下入度为0的点,就是根节点了,然后建树,就可以直接套模板求lca了,这里挂两个模板,一个是树上倍增,一个是树链剖分,都写了一下练练手: 树上倍增: #include<iostream> #inc...原创 2019-11-07 17:26:35 · 285 阅读 · 0 评论 -
CodeForces - 343D Water Tree(树链剖分+线段树)
题目链接:点击查看 题目大意:给出一棵树,然后给出m次操作,每次操作分为三种: 1 v:将v及其子树全部变为1 2 v:将v及其祖先全部变为0 3 v:查询点v的值 题目分析:树链剖分模板题,今下午刚做了一个比较难的,再回头看一下这个题,瞬间感觉简单好多了,为什么要挂着个题呢?为了提醒自己: 树链剖分后,线段树的建树、查询、访问用的都是全新的编号!!!! 这个样例也是坑人,样例中的5个...原创 2019-08-20 19:18:55 · 246 阅读 · 0 评论 -
HDU - 3804 Query on a tree(树链剖分+线段树+离线处理)
题目链接:点击查看 题目大意:给出一棵树,每条边上都有一个权值,给出m个查询:a,b:问从点1到点a的唯一路径上,在边权小于等于b的边中选出边权最大的值输出,若没有符合条件的边则输出-1; 题目分析:如果还不清楚树链剖分,这里有一个讲的很棒的博客:点击查看 然后看到这里就默认已经掌握了树链剖分和线段树的基础知识了。 下面分析一下这个题目的思路,题目很好理解,但如果直接暴力模拟的话必定超时,...原创 2019-08-20 16:21:06 · 280 阅读 · 0 评论 -
HDU - 5242 Game(树形dp+树链剖分/树上贪心+思维)
题目链接:点击查看 题目大意:给出一棵包含n个节点的树,每个节点都有一个权值,整棵树的根是点1,问从点1开始向下一直走到叶子节点,可以走k次,怎么样走权值和最大,每个节点被走过一次后权值会变为0 题目分析:这个题有两个方法可以做,先说一下比较好想的一种吧: 树形dp: 我们需要考虑应该怎样dp,因为每次都是从1节点向下走到叶子节点,可以先求出来最长链,即从点1到某一叶子节点权值最大的一条链...原创 2019-08-16 13:11:05 · 274 阅读 · 0 评论