首页 > TAG信息列表 > Son

835. Trie字符串统计

这个问题在于理解son这个数组,首先字典树可以理解为一层一层的, 首先,为什么是son[N][26]最长长度的字符串有N个字母,每个字母有26种可能所以就是这样。(其实一共字符串比如abc,可以算三种情况, a, ab, abc。) 比如这个: son[0]就理解为第一层,也就是字符串第一个字符,对应字符串的第一个

Educational Codeforces Round 2 | E. Lomsat gelral

E. Lomsat gelral CF600E.Lomsat gelral 题意 有一棵 \(n\) 个结点的以 \(1\) 号结点为根的有根树。 每个结点都有一个颜色,颜色是以编号表示的, \(i\) 号结点的颜色编号为 \(c_i\)。 如果一种颜色在以 \(x\) 为根的子树内出现次数最多,称其在以 \(x\) 为根的子树中占主导地位

KMP,Trie,&&洛谷P2580

KMP: 1 #include <bits/stdc++.h> 2 using namespace std; 3 const int maxn=1e6+5; 4 char a[maxn],b[maxn],aa[maxn],bb[maxn]; 5 //aa,bb为输入的字符串 6 //为了方便KMP的实现 7 //另开a,b两个字符串为实际操作自符串 8 //b为模式串 9 int nxt[maxn],cx[maxn]; 10 //

洛谷 P2590 [ZJOI2008]树的统计 题解

树链剖分板子,两次 DFS 预处理之后用线段树维护,问题转化为单点修改,区间查询(求和、最大值),对于询问路径跳到 LCA 上再查询即可。 //P2590 [ZJOI2008]树的统计 #pragma GCC optimize("Ofast") #include <bits/stdc++.h> using namespace std; const int MAXN=500005; int siz[MAXN],fa

HDU 5266 pog loves szh III 题解

错误示范:倍增+暴力 开始看到这题时限 6s 本来想着来一发暴力区间倍增 LCA,后来发现是多测之后自然凉凉,准保 T 飞。 然而没有 T,acc 上 RE(ReCoders),HDU WA。 正解:树剖+线段树 维护区间你想到了什么?当然是线段树啊! 分别考虑线段树的 build 和 query 操作。 build:递归,然后 pushup 维护

java复习随笔 (二)

注明:随笔只是作者复习所用,没有实际参考价值 面向对象 向上转型 向上转型即父类引用子类实例,例如: Father father = new Son(); 特点:丢失子类特有方法 向下转型 向下转型即子类引用父类实例,例如: Son son = (Son)new Father(); 特点:增加子类特有方法 多态 实现多态需要满足三个条

CF620E NewYearTree

题目链接   主要要实现区间覆盖和区间查询不同数,看见区间赋值操作可能会想到\(ODT\)来实现,区间查询不同数直接另外开一个数组记录一下就好了,但很可惜\(TLE\)了,代码如下: struct ODT { struct Node { i64 l, r; mutable i64 v;

LG3565 [POI2014]HOT-Hotels 题解

P3565 [POI2014]HOT-Hotels 给定一棵树,在树上选 \(3\) 个点,要求两两距离相等,求方案数。 原题数据范围 \(n\leq 5000\),可做到线性,空间 \(62.5\text{MB}\)。 sub1 \(n\leq 5000\) 不用多说,直接枚举每一个点作为中点,统计这个点不同的三颗子树中点的选取方案数。定义 \(f_i\) 为先前

元素居中方法

1、定位+外边距 .father{   position:relative;   top:50%;   left:50%;  width:40px;   height:40px;   .son{   posithon:absolute;   margin:-10px 0 0 -10px;   width:20px;   height:20px; } } 2、定位+位移(transform:translate(-50%,-50%)) .father{   pos

【模板】数据结构

树剖 戳他 平衡树 Splay 模板指路 点击查看代码 //超级全,啥都有 #include<bits/stdc++.h> using namespace std; const int N=1e5+5,INF=0x3f3f3f3f; struct node{ int son[2],cnt,val,tot,fa; }tr[N]; int co,root; int read(){ int sum=0,f=1;char a=getchar(); while(a<'

树哈希 学习笔记

1.做法(from peehs_moorhsum) 设 \(h(u)\) 表示一个点的哈希值,\(f\) 为一随机函数。 \(h(u)=1+\sum\limits_{v\in son_{u}}f(h(v))\) 首先 \(f\) 的选择大概率是随机的,只要尽量不选多项式即可。(微调一下)。 ull d(ull x){ return x*x*x*19260817+20220827; } ull f(ull x){

树上启发式合并(dsu on tree)

DSU on Tree and It's questions 树上启发式合并,可以在 \(O(n\log n)\) 的时间复杂度内解决一类对于子树的查询问题。这篇文章以题目为主。 算法流程 遍历 \(u\) 的所有轻儿子,计算答案,但不保留其在一个全局的数据结构内的结果。 遍历 \(u\) 的重儿子,保留它对一个全局数据结构的影

8.19

CF1720D2 题意: 给定序列\(A\),求\(A\)的最长子序列\(B\),满足\(a_p\oplus p+1<a_{p+1}\oplus p\) \(n\leq 3*10^5,0\leq a_i\leq 10^9\) 题解: 枚举两边的值从高位到地位有多少位相等,对于前\(k\)位来说,有: \(a_p\oplus p+1=a_{p+1}\oplus p\) 这样就可以把不等号变成等号,然后两边同时

供应链总销售额

https://www.acwing.com/problem/content/description/1567/ 思路: 这题可以不用记忆化搜索写,也不是很烦,在这儿记忆化搜索主要是用来解决求树的深度用的。 #include <iostream> #include <cstring> #include <algorithm> #include <cmath> using namespace std; const int N = 1

P1967 [NOIP2013 提高组] 货车运输 题解

题目描述 A 国有 \(n\) 座城市,编号从 \(1\) 到 \(n\),城市之间有 \(m\) 条双向道路。每一条道路对车辆都有重量限制,简称限重。 现在有 \(q\) 辆货车在运输货物, 司机们想知道每辆车在不超过车辆限重的情况下,最多能运多重的货物。 输入格式 第一行有两个用一个空格隔开的整数 $ n,m$,

原型及原型链

prototype 所有的函数都拥有一个属性,这个属性称为prototype,它是一个对象空间(里面可以存放对应的数据),也被称为显示原型。 function fn(){ } //打印这个属性对应的空间 console.log(fn.prototype) constructor构造器他指向对应的构建的函数(指向他自己) 根据上面的我们可以看到每个

基础长链剖分

基础长链剖分 基本上整个互联网上长链剖分都是使用 CF1009F 和树上 \(k\) 级祖先两题。本篇也无法避免qwq,因为这两题确实经典。 定义 定义 重儿子 表示其子节点中子树深度最大的子节点。如果没有儿子,就没有重儿子。定义 轻儿子 表示剩余的子节点。重边、轻边、重链的定义和重链剖

A层邀请赛4

A. 暗之链锁 翻书就好了,在树上差分的第一个例题,书上讲得太好了感觉我写啥都是多余。Cat本来可以1A的,结果把m看成了树边和非树边总共有m条,算贡献的时候算成了n-m...过样例的的时候读入错了我就发现了这个问题,结果改了一处没改第二处…… 有大佬说能用树链剖分+线段树,我懒了就没试,我

"蔚来杯"2022牛客暑期多校训练营3

A.Ancestor 给定两棵有\(n\)个节点的树\(A、B\),树上节点均有一个权值,给出\(k\)个关键点的编号\(x_1,x_2,...,x_k\),问有多少种方案,使得恰好去掉一个关键点后,剩余关键点在\(A\)中LCA的权值大于\(B\)中LCA的权值? 题解做法是预处理,预处理两个关键点序列在\(A,B\)两棵树上的前后缀LCA,

AcWing 1282. 搜索关键词 & 洛谷 P3808 【模板】AC 自动机(简单版)

AC自动机的板子 感觉非常合理,但是又不会证明,就先这样吧 感觉还有至少三个问题: 1、为什么要在空的子结点上连自己的fail结点的对应子结点(注释1) 2、为什么u结点不需要参与转移(注释2) 3、为什么遇到end == -1就可以break(注释3) #include<bits/stdc++.h> using namespace std; #define

LGP5203题解

这个去重给写麻了。。。。。。 显然对于两条非树边,其只能组成最多一条回路。构造方式是将两条非树边在树上的路径中重复的部分去掉,再加上两条非树边即可。 于是考虑如何统计重合的路径。 考虑将一条链拆成两条从祖先到孙子的链。统计这些链相交的情况。 可以注意到只有一个情况会

左偏树

作为可并堆的一种,左偏树算是又好写功能全且复杂度比较优的了 首先介绍一下结构: 左偏是指定义的 \(dis\) 值左子树比右子树大 \(dis\) 指的是 \(min(son_0,son_1)+1\),叶节点为零 注意这里的 \(dis\) 并不是深度,左偏树的深度是没有保证的,哪怕是一条链,只要满足左偏的性质就是符合的

浅谈树上启发式合并(DSU on tree)

先看例题 CF600E Lomsat gelral 链接 对于这道题,我们要对每一个子树进行查询。观察一下,很容易想到通过信息的合并让父节点继承子节点的信息。但是对于每个点都开一个桶会MLE sol1 线段树合并 对于每一个节点都开一个线段树,然后进行线段树合并即可。这样做虽然足以通过本题,但空间巨

字典树

概念: 字典树(TrieTree),是一种树形结构,典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串,如01字典树)。主要思想是利用字符串的公共前缀来节约存储空间。很好地利用了串的公共前缀,节约了存储空间。字典树主要包含两种操作,插入和查找。 模板: 字符串trie模板 #include <algor

样式穿透/deep/

一、scoped vue通过在<style> 里加入scoped 保证样式不会作用到子组件内,防止样式污染。 原理是给生成的dom加上一个“data-v序列号”的属性,再添加样式到对应的dom。 例子: <template> <div class="page"> this is page</div> </template> <style> .page { color: red; } </style>