随笔分类 - 图论--树
摘要:$n \leq 250000$的树有边权,每次问:使$k$个点无法到达根节点至少要割边权总和多少的边。$k$总和$\leq 500000$。 虚树模板。 1 //#include<iostream> 2 #include<cstring> 3 #include<cstdio> 4 //#includ
阅读全文
摘要:$n \leq 100000$的树支持$m \leq 100000$个操作:每个点有两个权值$a$和$b$,一,链加;二,链上$b_i+=a_i*d$,问最后所有的$b_i$。 这个题我在看到之前有想过链上的情况,当时以为标记是O(1)下传的就没细想。现在看来需要一些特殊技巧。首先链剖加线段树。 方
阅读全文
摘要:$n \leq 1e5$的树,$m \leq 1e5$个操作:链加;换根;查子树最值。 链剖:随便选个根,换根就记一下现在根。查子树最值时,只有原来的根到现在根这段的子树信息是怪怪的,但也只是挑掉一段子树而已,相当于查dfs序中前缀和后缀的最值。 LCT:不大会。。
阅读全文
摘要:$n \leq 100000$的树,有点权,$m \leq 100000$个操作:链加一非负数;查链上绝对值之和。初始数字$-1e8 \leq a_i \leq 1e8$,加的数字$0 \leq d \leq 1e8$。 因为一直加正数所以负数变正数只会发生$n$次,每次发生这件事时暴力改即可。链剖
阅读全文
摘要:$n \leq 100000$的树,每个点有个糖,$m \leq 100000$种糖,每种糖好吃度$V_i$,吃$j$颗$i$糖会得到愉悦值$V_i*W_j$,$q \leq 100000$个操作:修改一个点上的糖;查询某条链上吃糖的愉悦值。 首先看看能不能用啥数据结构维护。麻烦。好上莫队。 树上的
阅读全文
摘要:$n \leq 500000$的树给$m \leq 500000$个路径,$q \leq 500000$个询问每次问一个区间的路径交。 路径交口诀:(前方高能) 判有交,此链有彼祖; 取其交,最深两两祖。 说成人话就是:判两条路径有没有交,只要一条链的lca在另一条链上就一定有交;取两条路径的交,把
阅读全文
摘要:n<=400000个在线操作:树上插入一个某点权、父亲为某点的点;查询这样的最长点序列:序列的某个数必须是上一个数的祖先之一;序列的点权和不能超过x;序列的某个点的点权必须不小于上一个,且相邻两个点之间不存在点权大于等于深度大的那个点的点权的点。 说白了,就是每个点找他祖先中第一个点权大于等于他的点
阅读全文
摘要:n<=200000的边权树上问长度=K<=1000000的链中边数最少的。 点分治。开个桶统计各个长度的答案。 1 #include<string.h> 2 #include<stdlib.h> 3 #include<stdio.h> 4 #include<math.h> 5 #include<al
阅读全文
摘要:n<=100000的树,每个点上有个字母a-t之一,问有多少这样的链经过每个点:它的某一个排列的字母串起来是回文的。 就是有最多一个字母是奇数个啦。。这样点分算一波即可。。细节较多详见代码 1 #include<string.h> 2 #include<stdlib.h> 3 #include<st
阅读全文
摘要:n<=1e6的树问所有路径的极差之和。 被遗忘的套路。。。以后绝对不会再忘了QAQ 只要算最大值之和即可,最小值同理。数字从大到小排序(反正都是要排序的,如果从大到小不行等会反过来试试),然后逐个考虑贡献,这样的话考虑完一个点就得把这个点周围所有的边断掉表示经过这些边的路径(即经过当前点的路径)不再
阅读全文
摘要:n<=200000的树,给dfs序和bfs序,问所有可能情况的平均树深。 有点懵的题。。 根据bfs序进行1-n的编号之后,可以通过在bfs序中划层来考察层数。也就是说答案和划层行动的进行的可行度息息相关。所以现在把目光放在数组$x_i$,表示i和i+1(按bfs序重编号后)是否在同一层。 首先,记
阅读全文
摘要:n<=100000,m<=500000的图有点权边权,q<=500000个询问每次问从x出发经过不超过y的边权能到的点权第K大,加强版强制在线。 Emmmmmm有一个漂亮的方法来转化,就是对原图做MST,做的时候要连接两个点时不要直接连,新开一个点然后让这两个点连上这个点。 这样就把边权挂到树上了,
阅读全文
摘要:n<=100000的点权树,有m<=100000个询问,每次问两个点间的第k小点权,保证有解,强制在线。 主席上树啦!类似于之前的序列不带修改询问的前缀表示法,现在只要把前缀当成某点到根的信息即可。然后比如要问x点和y点,z为lca(x,y),w为z的爸爸,那么x,y,z,w四棵线段树一起跑即可。
阅读全文
摘要:n<=1e5的有根点权树,m<=1e5个操作:换根,修改点权,查询子树最小值。 维护子树信息--dfs序,至于换根只需要分类讨论一下现在根和查询点的关系。 如果查询的点是根节点,就输出整颗树的最小值。 如果查询的点5在1到7的路径上,那以7为根的时候查询5,就是整颗树排除粉红色部分--5的儿子中,是
阅读全文
摘要:n<=1e5个点的树有边权,m个询问,每次问max dis(i,j) a<=i<=b,c<=j<=d。 结论:一个区间的最远点对,要么是其左半区间的最远点对,要么是其右半区间的最远点对,要么是左右半区间最远点对的四个点的互相组合之一。如下图: 两个集合最远点对分别是A-B,A并B的最远点对是红A-蓝
阅读全文
摘要:求三个人从a,b,c这三个位置跳到x,y,z最少多少步。跳:任意选一颗棋子,对一颗中轴棋子跳动。跳动后两颗棋子距离不变。一次只允许跳过1颗棋子。 从它跳的性质出发,向内跳只有一种操作,而向外跳有两种。这就是说,每个状态可以找到一个唯一前趋,有两个后继。这是一棵二叉树!求两个状态的最短路就是求他们到l
阅读全文
摘要:n<=50000的树,深度<=100,有点权,选两个点x,y,使最小。 dis取了min之后,整个树就会以某条边为分界线分成两半,一半归一个点管。如果是两棵完全独立的树的话,那肯定分别取这两棵树的带权重心。但割掉某条边再找两边重心,这种情况不一定是合法情况。例如: 上图中,虚线边被断开,两边的重心分
阅读全文
摘要:n<=300000个点的树,每个点有个人于第Ti秒观测,有m<=300000个人于时间0开始从Sj跑到Tj,速度1个点每秒,输出每个点上的人观察到的跑步的人的数量。 前25分:直接模拟每条路径,先s跑到lca再跑到t,边跑边记时间,如果经过某个点时时间刚好一样就该点答案++。 Si等于1的20分:观
阅读全文

浙公网安备 33010602011771号