
虚树
stargazer.
夜を穿つの
展开
-
【BZOJ3611】【HeOI2014】—大工程(虚树+dp)
传送门首先肯定建出虚树考虑三种答案如何分别统计路径长度和显然示是对于每条边考虑一下上下有多少个点,乘一下就可以了最大值显然就是树的直径最小值可以考虑树形dpdpdp,考虑mn[i]mn[i]mn[i]表示iii到其子树中最近的距离显然可以类似直径树形dpdpdp解决#include<bits/stdc++.h>using namespace std;#define l...原创 2019-03-12 11:00:36 · 168 阅读 · 0 评论 -
【BZOJ3572】【HNOI2014】—世界树(虚树+倍增+dp)
传送门考虑将虚树建出来我们先对于每个虚树的点点求出被哪个地方支配然后考虑对每一条边考虑如果两边点被同一点支配就不用管了否则考虑倍增找到中点分别计算一下贡献可以处理一个remremrem表示子树中除去已经被计算过的剩下的sizsizsiz也就可以方便统计那些没有关键点的子树了具体可以看代码#include<bits/stdc++.h>using namespace ...原创 2019-04-10 21:24:03 · 173 阅读 · 0 评论 -
【BZOJ3879】—SvT(后缀自动机+虚树/后缀自动机+单调栈)
传送门后缀数组终于跑过了SamSamSam了后缀自动机上虚树是显然的后缀数组就按rkrkrk排序后考虑每个位置的贡献,显然就是左右都比他大的时候单调栈维护一下就是了后缀数组+单调栈#include<bits/stdc++.h>using namespace std;const int RLEN=1<<20|1;inline char gc(){ ...原创 2019-07-18 15:44:15 · 216 阅读 · 0 评论 -
【SDOI2019】—世界地图(虚树+Kruscal)
传送门直接每次暴力做是qmnlogqmnlogqmnlog的考虑如果维护了地图前后缀的最小生成树每次就相当于加入了(m,1)(m,1)(m,1)中间的nnn条边加边就是找2点间最大值删去考虑对最小生成树建虚树对于前缀,对第一列的点建虚树,边权为链上最大值后缀类似对最后一列这样做这样每次合并就只需要对O(n)O(n)O(n)个点做最小生成树就可以了复杂度O(qnlogn+mnlog...原创 2019-09-19 13:15:04 · 236 阅读 · 0 评论 -
【Codeforces 809 E】—Surprise me!(欧拉函数+莫比乌斯反演+虚树)
传送门考虑有ϕ(ij)=ϕ(i)∗ϕ(j)∗gcd(i,j)ϕ(gcd(i,j))\phi(ij)=\phi(i)*\phi(j)*\frac{gcd(i,j)}{\phi(gcd(i,j))}ϕ(ij)=ϕ(i)∗ϕ(j)∗ϕ(gcd(i,j))gcd(i,j)然后就可以枚举gcdgcdgcd乱莫反了推出来最后就是ans=∑hT(h)∑i,jnhϕ(hi)ϕ(hj)dis(p[ih]...原创 2019-10-07 16:52:00 · 225 阅读 · 0 评论