随笔分类 - 题解
摘要:好题,又学两个思路。 先把问题变简单一点,去掉深度限制,那么有两种做法: 经典的前驱后继转化到二维数点。 颜色相同的点按 \(dfs\) 序排序,每个点 \(+1\),相邻两点 \(lca-1\)。转化为区间求和。 第二种相对实现简单。 假如加上深度,我们可以离线问题,按深度顺序加点。 要在线的话,
阅读全文
摘要:学到新思路了:求解 \(k\) 大值时,可以将所有元素放一块一起跑。 考虑到 \(n,q\) 奇小无匹,我们便可以制造一个 \(O(qn\log V)\) 的代码。 那么对于我们不想在时间复杂度中出现的 \(m\),我们直接把他扔进可持久化 \(Trie\) 中销赃。 再根据刚才那个思路,将 \([
阅读全文
摘要:相当好的题目,虽然和我前几天出的题重了qwq。 \(lmx\) 是我们的红太阳,没有他我们就会死!!! 暴力枚举一个端点,然后用可持久化 \(01\ Trie\) 或者离线 \(Trie\)(当然这题用不了,但不强制在线的话是可以的)得到答案。时间复杂度 \(O(nm\log n)\),过不了,考虑
阅读全文
摘要:三棵树就很毒瘤了,我们一棵一棵看。 关于第一棵树的路径,经典解法就是点分治和边分治,考虑哪种更加简单。 设 \(dis1/2/3(x)\) 表示 \(x\) 在第 \(1/2/3\) 棵树中的深度(第一棵树的深度当然是点到重心或重边的距离),\(lca2/3(x,y)\) 表示在第 \(2/3\)
阅读全文
摘要:首先发现 \(p_x\times dis(x,y)+q_x\) 异常像是能斜率优化的样子,那先把求 \(f_x\) 的式子写出来(下设 \(d_x\) 表示 \(x\) 到根的距离): \[f_x=\min_{lca(x,y)=y,y\ne x}(p_x\times(d_x-d_y)+q_x+f_y
阅读全文
摘要:首先只要得到 \(x=0\) 时的答案,就可以 \(AC\) 本题。这是很重要的。 考虑由于不能有重复经过的边,所以两路径交点数量 \(\le 1\)。 容易想到设 \(dp_u\) 表示以 \(u\) 为端点的链中的贡献最大值。考虑换根 \(dp\),所以先设它只表示它子树内的部分。 当交点数量
阅读全文
摘要:感觉长脑子了。 考虑在路线两端点的 \(lca\) 计算贡献,那么线段可以分两类: \(u\) 为 \(v\) 祖先。 \(u,v\) 互不为祖先。 设 \(dp_i\) 表示只考虑 \(i\) 子树内的路线时的答案。 引理:若插入一条以 \(i\) 为 \(lca\) 的路径会使以 \(i\) 的
阅读全文
摘要:随机化好题,但是不会证。 考虑把树看成一条链,链的每个点上缀了一棵树。 那么先随机出两个点 \(x,y\)(实际上随机一个点,另一个点固定似乎更好?),然后对于当前这棵树上的任意点 \(z\),都让他进行一次询问,答案为 \(o=Q(x,y,z)\)。 那么当 \(o=z\) 时,显然 \(z\)
阅读全文
摘要:绝对好题。 考虑每个点插入的次数必须为 \(\log n\) 级别的,而且还要再小。考虑重链剖分。当然,首先要询问出所有点的深度,并且按深度从小到大依次插入。 每次选择当前重链的链尾,若链尾深度为 \(dep\),询问返回值为 \(dp\),目标父亲深度为 \(d\),则在这条重链上深度为 \(d-
阅读全文
摘要:首先 \(S(u)\) 显然是 \(u\) 的子树。 假如 \(u\) 是定点,问题转化为区间求平方和,十分简单。 于是我们用线段树维护区间平方和,支持区间加,然后离线问题,在 \(u\) 的位置处理即可。线段树从 \(fa\) 转移到 \(u\) 是极度简单的。 时间复杂度 \(O(n\log n
阅读全文
摘要:第一道函数交互 \(+\ luogu\) 最劣解,这不得发篇博客鼓励一下。 引理 \(1\):若 \(p_{i,j}>0,p_{i,k}>0,p_{j,k}=0(i\ne j\ne k)\),则不合法。 正确性显然。 引理 \(2\):若 \(p_{i,j}=3\),则不合法。 证明:设三条路径为
阅读全文
摘要:明显有森林的趋势,但是很有可能会出现环,相当于最后图的形状一定是树和基环树森林。 考虑到环内所有点一选俱选,一没俱没,所以可以直接缩成一个点。 然后就是最基础的树上背包 \(dp\),和金明差不多。 时间复杂度 \(O(nm^2)\)。 #include<bits/stdc++.h> using n
阅读全文
摘要:考虑当没有强制在线时,容易想到一个点 \(i\) 所影响的区间 \([l,r]\) 满足 \(pr_i<l\le i,i\le r<nx_i\)。显然可以转化为矩阵修改,单点求 \(\max\) 的问题。那扫描线 \(+\ set\) 轻松拿下。 强制在线就把线段树换成主席树就可以了。注意这里不能下
阅读全文
摘要:函数复合,直接转化为离线问题,那我们就需要完成对满足条件的量的区间加操作。 显然 \(ans_{[l,r]}\ge ans_{(l,r]}\),所以可以线段树二分。 时间复杂度 \(O(q\log n)\)。 #include<bits/stdc++.h> using namespace std;
阅读全文
摘要:考虑到正向求解困难,于是正难则反。 那么实际上对于 \(a_i\) 和 \(a_{i+1}\) 来说,它们给答案的贡献就是满足 \(l_j>a_i,r_j<a_{i+1}\) 的区间数量。 那么就是经典转化了。直接转换为二维数点问题即可。时间复杂度 \(O(tn\log V)\),离散化可以将 \(
阅读全文
摘要:相当套路而巧妙的构造。 假如我们对于横纵坐标构造二分图,然后用如下方法连边: 对于点 \((x,y)\),连接 \(x,y\)。 那么对于一个有 \(num_x\) 个横坐标点和 \(num_y\) 个纵坐标点的连通块,它所产生的贡献就是 \(num_x\times num_y\)。 这玩意儿需要联
阅读全文
摘要:\(xor\) 最大值想到线性基,路径想到 \(lca\) 和树链剖分,由于没有修改用 \(lca\) 就可以。先用处理 \(fa\) 数组的方式处理倍增线性基(自然是得用线性基合并的),在求 \(lca\) 时把所有线性基全部合到一块儿就行。 考虑到本题实际上核心在于让路径上的线性基数量 \(\l
阅读全文
摘要:考虑不联通的情况。图不好做,就造一棵生成树出来,由于是无向图,所以只有树边和返祖边。 发现在一条树边断开后,生成树会分成两个连通块,由覆盖这条树边的返祖边链接,只有这些返祖边也全部断开,原图才会不联通。 想到异或的优良性质。我们给所有返祖边在 \([0,2^{63})\) 中随机一个值作为这条边的权
阅读全文
摘要:不得不说这题的确挺苟的。 注:下述“引理”表示: 对于长度为 \(n\) 的数组 \(V\),其线性基为 \(B\),定义 \(c_v=\bigoplus\limits_{a\in v}a\),\(num_k=\sum\limits_{v\subseteq V}[c_v=k]\),则 \(\fora
阅读全文
摘要:因为要求本质不同的图,容易想到群论。 为了方便处理,将边是否存在转化为边的黑白染色问题(实际上就是 \([SHOI2006]\) 有色图 的弱化版本,最终公式也差不多)。 根据 \(Burnside\) 引理和 \(Polya\) 定理,将问题转化为:对于每种置换方案,有多少个边的等价类。 考虑对于
阅读全文