树
文章平均质量分 72
Jose何塞
这个作者很懒,什么都没留下…
展开
-
JZOJ7038. 2021.04.01【2021省赛模拟】异或 (inception)题解
之前做过一道一模一样的题目 连数据范围都一样!!! 但自己还是没能想出那个结论!!! 结论:子序列中两两异或的最小值>=x>=x>=x,这个最小值只可能在排序后相邻两项中取得。 也就是说对于∀a≤b≤c,min(a⨁b,b⨁c)≤a⨁c\forall a\leq b\leq c,min(a\bigoplus b,b\bigoplus c)\leq a\bigoplus c∀a≤b≤c,min(a⨁b,b⨁c)≤a⨁c 等于的情况显然。 对于不等于的情况,考虑a,b,ca,b,ca,b,c不原创 2021-04-01 20:15:33 · 165 阅读 · 0 评论 -
6086. 【GDOI2019模拟2019.3.26】动态半平面交 题解
这道题首先考虑如何处理lcm。 因为有模数,所以lcm(x,y)=x∗y/gcd(x,y)lcm(x,y)=x*y/gcd(x,y)lcm(x,y)=x∗y/gcd(x,y)这样的东西就用不上 设a[i]=∑i=1npicia[i]=\sum_{i=1}^{n}{p_i}^{ci}a[i]=∑i=1npici 对于一个pi,将pi拆成ci个不同颜色,每个颜色的权值都是pi 那么lcm就是所有至少出现过一次的颜色权值积 这个至少出现过一次怎么处理呢? 首先每个点都有1个乘pi的标记 对于两个dfn序相邻的原创 2021-03-31 16:59:18 · 187 阅读 · 0 评论 -
6995. 2021.03.06【2021省赛模拟】组合(zh)题解
HZHHZHHZH来找我问这道题,我发现自己的理解真的太模糊了,无法讲题,所以要写写题解,总结一下思路。 其实O(n2)O(n^2)O(n2)的思路是很重要的,并不是那么好想。 定义: f[i][j]f[i][j]f[i][j]为以iii为根,与iii距离为jjj的点个数 g[i][j]g[i][j]g[i][j]为以iii为根,存在两个点aaa,bbb,设它们的lcalcalca为ccc,满足aaa,bbb到ccc距离为ddd且ccc到iii的距离为d−jd-jd−j的(a,b)(a,b)(a,b)点对数原创 2021-03-13 19:59:24 · 114 阅读 · 0 评论 -
【2020.12.02提高组模拟】牧羊人(shepherd)题解
好像又是克罗地亚的题,那就公开写题解吧 先说最重要的结论:每次选择一个深度最大的羊,寻找一个深度最浅的能够保护它的点放置牧羊人,将牧羊人能保护的点踢出队列,继续做到直至每只羊都被保护到为止 感性理解一下: 首先对于一只深度最深的羊,将牧羊人放在它的下面肯定不如上面优 那么在能够保护这只羊的前提下,我们完全可以将牧羊人的位置上调,这样答案不会更劣,如果能够保护到其它羊就可能减少牧羊人的个数,从而答案会更优 QED 那么这道题可以分为几个步骤: 1.找到深度最深的羊 2.找到深度最浅的能够保护它的点放置牧羊人原创 2020-12-02 22:18:51 · 214 阅读 · 0 评论 -
如何用ST表求LCA
一道煞笔卡常题让我学习了用ST表求LCA的方法 首先要对欧拉序有了解(图从网上剽窃的) 其欧拉序为ABDBEGEBACFH 就是所谓的游历序列(走到哪里就将其字母压入数组里,走不下去回来,走的下去就往下走),自己在树上走走就发现了 记in[x],out[x]in[x],out[x]in[x],out[x]为x第一次入队的位置和最后一次入队的位置 对于两个点x,y 首先判定掉它们的祖先关系 那么有in[x],out[x]包含in[y],out[y],或者in[y],out[y]包含in[x],out[x]i原创 2020-11-26 11:28:37 · 779 阅读 · 0 评论 -
点分治入门---树中点对距离详(?)解
题目大意:给出一棵带边权的树,问有多少对点的距离<=Len 其中树最多有10000个点,Len<=maxlongint 这是一道模板题目。 对于一个点x,我们考虑如何求解经过x点的路径方案数,设为f(x)。 考虑直接从x出发做一遍DFS,算出所有未到过的点到x点的距离,然后排序。 设两个指针,如果length[l]+length[r]<=len,那么length[l]+leng...原创 2019-12-06 21:13:23 · 267 阅读 · 0 评论 -
线段树合并
线段树合并,是一种听起来很高大上的算法。 其意义是将两棵线段树合为一棵,相同位置的信息合在一起。(通常为权值线段树) 实现不难,具体如下: 对于两棵树节点x,y 1. 如果x,y其中有一个为空,返回另一个不为空的数的值 2. 否则新建一个节点,将两棵树的节点信息合并,然后递归左右子树继续合并,直到步骤1 很简单是吧? 看一下code: int merge(int l,int r,int x,int...原创 2019-07-12 22:45:56 · 336 阅读 · 0 评论 -
斯坦纳树入门
斯坦纳树可以解决下面的问题 给定一个带权无向图和某些关键点,求一棵最小生成树(必须满足所有关键节点都在此树上) 考虑使用状压DP求解 f[i][s]表示以i为根节点的树中选择关键点的状态为s(状压) 枚举一个t(t|s==s),f[i][s]=min(f[i][s],f[i][t]+f[i][s-t]) val是i与son连边的代价 看起来很好理解,就是将两棵树拼成一棵新树。 还有第二种转移:f[......原创 2019-08-02 07:59:46 · 516 阅读 · 0 评论