随机树跑得贼快 普通地维护重儿子,链端 每次跳链端的父亲,每次跳至少能缩小一半的sz ...
分类:
其他好文 时间:
2019-10-04 09:57:25
阅读次数:
60
看了一下网上基本都是线段树二分的题解,然而我想到一种整体二分的思路,正好练习一下。 是道好题。 首先用树上ST表处理,用于求LCA。 考虑整体二分离线求解。 一种方法是用树链剖分的,复杂度是$O(log^2n)$的,在套上个整体二分,复杂度达到了$O(nlog^3n)$所以说不可以直接树剖暴力。 可 ...
分类:
其他好文 时间:
2019-10-03 20:01:54
阅读次数:
84
订正了三天的题目 自闭.... T1 幸福T2 树链剖分 考虑到 对于一个 树 确定覆盖哪几条边 不会随着 树的根节点的改变而改变 而且 这种对于一个无根树的路径进行覆盖 我们显然可以想到 树上差分 对于边的差分 对于一条路径从s到t 我们类比序列上的差分 即 $sum[s]--,sum[t]--, ...
分类:
其他好文 时间:
2019-10-03 18:19:30
阅读次数:
91
前置知识:线段树,链式前向星,LCA,DFS序 树链剖分通常的操作: 1.x y 的路径上修改 2.x y 的路径上查询 3. 对于 x 的子树修改 4.对于 x 的子树查询。 一般还有换根操作。树剖也也可以做LCA。 树链剖分有两个DFS 这两个DFS就是把一棵树变成一个序列。 然后就可以用数据结 ...
分类:
其他好文 时间:
2019-10-03 16:12:30
阅读次数:
81
算法思路就不说了,其实比较简单 这里讲一下坑点: 1.虽然我们可以将边权压到点上,但是当根不同时,差分数组显然不同。所以我们不能真的将边权看做点权,换根时还是要将其当做边权来考虑。 1.更新时,我们设dp[u]表示u节点为根时的最大价值,由于经过点u后,点v的儿子将变成点u,所以此时我们要更新点v的 ...
分类:
其他好文 时间:
2019-10-01 22:14:28
阅读次数:
94
正解是树剖。 首先Kru求最小生成树。 然后分别考虑树边和非树边的答案。 首先是非树边,非树边链接的两个点在MST上能够构成一条链。 这条链上最大的那条边-1就是这条边的答案。 为什么。 模拟Kru的过程。如果这条边在树上那一条之前的话。这条边的起点和终点两个集合必然还没有链接。 因为之前那树上那一 ...
分类:
其他好文 时间:
2019-09-22 12:57:58
阅读次数:
70
本场比赛的最后一题,不过好像并没有任何防AK的作用。 至于YQOI,那是没前缀名看了不顺眼。 树链剖分模板题?有点像。 题目大意 给定一棵树和每个点的初始状态(标记或不标记),每次修改一个点的状态(状态取反)或询问树上所有标记点到$u v$的简单路径的最短距离之和。 以下是数据范围: 无脑暴力 我们 ...
分类:
其他好文 时间:
2019-09-13 17:09:54
阅读次数:
90
树剖上维护可持久化01trie即可 #include<bits/stdc++.h> using namespace std; #define rep(i,a,b) for(int i=(a);i<=(b);i++) #define repp(i,a,b) for(int i=(a);i>=(b);- ...
分类:
其他好文 时间:
2019-09-13 15:22:31
阅读次数:
80
题目链接:https://www.luogu.org/problem/P3178 一定要用LL !!!!! ...
分类:
其他好文 时间:
2019-09-04 16:24:41
阅读次数:
95
在一颗有边权的树上有m条路径,清零一条边的边权使得m条路径的最大值最小。 输出这个最大值 显然 要遍历这m条路的最长路(如果最长路有多条随意遍历一条即可) 因为树上距离不修改 那么用前缀和维护树上路径长度可以少一个log 然后遍历最长路的每一条边 ans=min(ans,max(最长路的长度-这条路 ...
分类:
其他好文 时间:
2019-08-30 15:54:50
阅读次数:
75