首页 > 其他分享 >树上计数2

树上计数2

时间:2024-08-17 08:58:23浏览次数:6  
标签:序中 text 计数 树上 出现 欧拉

树上莫队通过将树转化成DFS序(欧拉序)来解决问题。这道题目跟“HH的项链”很像,考虑树上莫队

首先对树做出一个欧拉序,得到每个点在欧拉序中第一次出现的位置in[x]和第二次出现的位置out[x];如果某个询问的\((x,y)\)的in[x]in[y]大,那么交换\(x,y\),下面假设in[x]in[y]

如果\(x,y\)的\(\text{lca}\)是\(x\),那么在欧拉序中从in[x]in[y]中出现了一次的数就是树上\(x,y\)路径之中的数;否则的话,欧拉序中从out[x]in[y]中出现了一次的数加上\(\text{lca(x,y)}\)就是树上\(x,y\)路径之间的数

统计的时候,记录两个数组,cntst,前者表示每种颜色出现的次数(只记录出现一次的数的颜色),后者表示一个数出现的次数(如果出现了两次或者没有出现,那么他所代表的颜色不会计数),剩下的见打卡代码

OI-wiki上好像还有直接在树上做莫队的,有空了学一下

标签:序中,text,计数,树上,出现,欧拉
From: https://www.cnblogs.com/dingxingdi/p/18363994

相关文章

  • 计数题总结
    实在有必要单独拿出来说说,我一直认为我的计数能力相较其他能力是较突出的,但是最近做到的题目让我不得不怀疑我到底会不会做计数题。做计数时还是只能靠灵光一现吗?那这样的题目叫我怎么灵光一现?所以有必要好好总结计数题的常见技巧。当然因为样本量有限,所以可能会漏掉某些重要的技......
  • 2024杭电多校第十场 1002树上询问(题解)
    题意给一棵树,每个节点有一个权值,并且权值是一个排列。接下来有多次操作,每次操作要么是交换两个节点权值,要么是询问一个权值区间\([L,R]\),判断是否存在树上的一个路径,使得路径上的权值恰好都在这个区间里分析由于询问的是树上的一个路径,联想到了树上莫队中对路径的处理。这里......
  • CSP/NOIP计数题一些奇奇怪怪的东西
    卡特兰数常见公式:不是很懂。\[H_n=C_{2n}^n-C_{2n}^{n-1}\]应用:折线计数。第二类斯特林数在小球与盒子那道模板题中见到的,表示表示将\(n\)个两两不同的元素,划分为\(k\)个互不区分的非空子集的方案数。递推式:\[\operatorname{S2}_{i,j}=j\times\operatorname{S2}_{i-......
  • 20240813:组合计数选做
    P3214[HNOI2011]卡农题意:\(m\)个集合,\(n\)种元素,求集合间互不相同且每种元素出现偶数次的方案数。题目等价于从\(1\sim2^n-1\)里选出\(m\)个不同的数,使他们异或和为\(0\)。不妨对每个数标号,由于互不相同,最后除以\(m!\)即可。设\(f_i\)表示前\(i\)个数异或......
  • 【树上点差分、LCA】Max Flow P
    核心思路[USACO15DEC]MaxFlowP-洛谷sum[u]++,sum[v]++,sum[lca(u,v)]--,sum[fa[lca(u,v)]];本质上就是,对树进行差分自底向上进行统计处理#include<bits/stdc++.h>usingnamespacestd;intn,m;constintN=200000+10;vector<int>G[N];intdep[N],fa[N],hs......
  • P5836 [USACO19DEC] Milk Visits S(树上并查集)
    核心思路对于相同颜色且相邻的点合并。若不在同一集合,则0若在同一集合,同色1异色0AC代码#include<bits/stdc++.h>usingnamespacestd;intfa[1145141];charcol[1145141];intn,m;intfind(intx){ if(x==fa[x]) returnx; returnfa[x]=find(fa[x]);}v......
  • 图计数(三个思想,贼重要,紫题,非常有东西)
    https://www.luogu.com.cn/problem/AT_abc180_f第3题   图计数 查看测评数据信息给n个节点m条边,构造一些无向图,构造出来的图需要满足以下条件:(1)图中没有自环(2)图中每个点的度最大是2(3)图中连通块大小最大为L问能构造出多少个这样的图出来,答案可能很大,对1e9+7取模输入......
  • 数据结构 顺序队列(计数器版)
    在实现循环队列时,为了区分队列为空和队列满的情况,我们通常会浪费一个位置。也就是说,如果队列的总容量是100,那么实际上只能存储99个元素。这是因为我们需要保留一个位置来判断队列是满的还是空的。如果我们不这样做,那么在队列满和队列空时,front和rear指针都会指向同一个位置,......
  • lg组合计数
    组合计数关于记号\[C_n^m={n\choosem}=A_n^m/m!=n^{\underline{m}}/m!\]插板法插板法:分集合问题\(\iff\)不定方程正整数解计数问题\[{n-1\choosem-1}\]创造条件法(构造双射),即,构造元素集合\(A,B\),以及一个\(A,B\)之间的双射\(f\),则把计数\(A\)变成计数\(B\)。......
  • 【线段树合并/树上差分】[P4556 [Vani有约会] 雨天的尾巴 /【模板】线段树合并
    【线段树合并/树上差分】P4556[Vani有约会]雨天的尾巴/【模板】线段树合并思路对\(x,y,lca(u,v),fa_{lca(u,v)}\)四个点进行树上差分,然后用线段树合并动态权值线段树。#include<bits/stdc++.h>usingnamespacestd;usingi64=longlong;template<classNode>str......