
LCA
Spy97
这个作者很懒,什么都没留下…
展开
-
Jamie and Tree codeforces 916E
题目大意:给出一棵树以及每个结点的权值,初始时根为1。有3种操作:一是将根换为x;二是给出两个节点u,v,把包含这两个点的最小子树中每个节点权值加上x;三是查询以u为根的权值和。题解:不考虑换根时,需要的算法是裸的模板线段树+dfs序+LCA,考虑到换根,我们不必真的换,只需要对操作2和3进行分类讨论。对于第一种操作,直接将根换一下即可。对于第二种操作,设t为(u,v)的LCA,分为两大种情况,一...原创 2018-04-06 02:30:54 · 324 阅读 · 3 评论 -
HDU 6393
题意:一个n个点,n条边的图,2中操作,1是将某条边的权值更改,2是询问两点的最短距离。题解: 由于n个点,n条边,所以是树加一个环,将环上的边随意取出一条,就是1颗树,以取出的边的一个端点为根,建立有根树。虚线就是取出的边。红色为环上的边。对于更改边的权值的操作,用dfs序+区间修改点查询的树状树组维护。对于询问最短路的操作,用LCA分类解决。假设询问的两点是x、...原创 2018-08-15 00:07:06 · 358 阅读 · 0 评论 -
Kruskal重构树
建树方法在Kruskal求最小/最大生成树的基础上,假设要加入的u、v两点,边权为w,设u、v两点的father为fu、fv,新建一个点(从n+1开始标号)p,father[fu]=father[fv]=p,将点p的点权设为w。 使用方法:最小生成树的任意两点的最大值:将边从小到大排序后,正常Kruskal重构树建边,加上LCA即可,LCAdence点权就是最大值最大生成树...原创 2018-09-13 16:08:44 · 201 阅读 · 0 评论 -
华中科技大学程序设计邀请赛网络赛 F War
题意给出一个n个点的树,询问编号在一个区间内的点到给定点的最近距离。题解分块暴力求解,整块中用SPFA预处理,零散的用LCA求解。首先根据内存限制,计算出打开能开200∗N200*N200∗N的数组,所以,每500500500个点为一块,在块内跑一边SPFA,求出块内的点到其他点的最短路。询问区间[l,r][l,r][l,r],分为多个整块的和多个零散的在块以外的,整块的就用之前SP...原创 2019-04-14 00:10:41 · 227 阅读 · 0 评论 -
ZOJ 4097 Rescue the Princess
题目链接: http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5986题意nnn个点,mmm条边的图,询问z,x,yz,x,yz,x,y,是否能找到xxx到zzz,yyy到zzz没有重复经过路的方案。题解边双联通,进行缩点,然后用LCA判断。代码#include<bits/stdc++.h>#define...原创 2019-04-17 00:08:44 · 354 阅读 · 0 评论