毛毛虫剖分 一种由重链剖分推广而成的树上结点重标号方法,支持 修改/查询 一只毛毛虫的信息,并且可以对毛毛虫的身体和足分别 修改/查询 不同信息 。 可以用来解决一些大力树剖也可以解决的问题。 一些定义: 毛毛虫:一条树上的链和与这条链邻接的所有结点构成的集合; 虫身:毛毛虫的链部
Colorful Tree 题目大意 给我们一棵树,每个节点有一个颜色。 需要完成两个操作。 求某一种颜色的最小生成树的边数 将某一个节点的颜色改为另一种颜色 思路 不得不提到一个名词,虚树。虚树的概念大就是说我们不用真的把每一次改变后的树都重新建出来,我们只需要维护某些性质即可。
继承 父类拥有属性及相关方法, 通过继承,子类也可以拥有(私有的不可能获取) 继承实现方式 1.ES6的extends关键词来实现继承(class) class Person{ constructor( ){ this.name = '哈哈'; } } class Son extends Person{ constructor( ) { super( )
遍历: inline void dfs(int u) { sz[u] = 1; dep[u] = dep[fa[u]] + 1; int v; for(int e = hd[u]; e; e = nt[e]) { dfs(v = to[e]); sz[u] += sz[v]; if(sz[v] > sz[son[u]]) son[u] = v; } } inline void dfs2(int u) { dfn[u] = ++tott; rv[tott] = u; to
因为计算几何题不会所以就没有 A.Extract Numbers 题目描述 原题面 题目分析 注意到所有的单词通过 , 或 ; 分割,可能会有空的单词。我感觉比较好的写法是把每个单词提取出来,对于两种字符串分别搞两个 vector 然后插入就好了。字符串模拟也没啥说的 代码详解 点击查看代码 #includ
【题解】P5283 [十二省联考 2019] 异或粽子 很好的优先队列+可持久化字典树练手题! 题目链接 P5283 [十二省联考 2019] 异或粽子 - 洛谷 题意概述 给定长度为 \(n\) 的序列 \(a_i\)。一个区间 \([l,r](1 \le l \le r \le n)\) 的价值为从 \(a_l\) 到 \(a_r\) 之间的每个数字进行的
题目 (可能有点长,但是请耐心看完,个人认为比官方题解好懂:P) 首先需要注意,对于任意节点i上的一个棋子,如果在一种走法中它走到了节点j,另一种走法中它走到了节点k,那么这两种走法进行完后,棋子占据的节点集合不可能相同,因为在这两种走法中,节点i必有两个子树中的棋子数量不同。所以,题目
点击查看代码 #include<iostream> #include<cstring> using namespace std; const int N = 110; int n, m; int h[N], e[N], ne[N], idx; int v[N], w[N], f[N][N]; void add(int a, int b) { e[idx] = b, ne[idx] = h[a], h[a] = idx ++; } void dfs(int u) { f
D1T1 树形 \(\text{DP}\)。 令 \(f_{u,s,k},(k\in\{0,1\})\) 表示仅考虑以点 \(u\) 为根的子树,固定 \(u\) 的权值为 \(s\),\(u\) 子树中是否有点的权比 \(u\) 的权大的方案数。 \[\begin{aligned}\\ f_{u,s,0}&=\sum_{v\in\operatorname{son}(u)}\sum_{w\in\operatorname{son}(u),w
一、类的初始化 1、类的初始化如何触发 a、new一个类的实例对象之前,需要进行类加载和初始化; b、访问类的静态变量或者对类的静态变量进行赋值; c、类的静态方法的调用; d、使用反射机制进行上面1、2、3的操作; e、main()方法所在的类需要先加载和初始化; f、
如果从父类继承的方法不能满足子类的需求的情况下,可以对其进行改写,这个过程叫做方法的覆盖,也成为了方法的重写,子类中出现了和父类中一模一样的方法生命,也称为方法的覆盖或者方法的重写 方法重写的规则: 1.方法名称相同 2.参数列表相同 3.返回值的类型必须相同 父类: public class
转载:https://blog.csdn.net/qq_41929578/article/details/122671455 序言 最近在开发Vue项目,发现了一个ref的使用场景:将父组件中的值传递给子组件并且调用子组件的方法。获取dom元素获取子组件中的data调用子组件中的方法1.获取dom元素通过`this.$refs.name`获取dom元素//
正题 题目链接:https://www.luogu.com.cn/problem/P6118 题目大意 给出一棵\(n\)个点的树,对于一个点\(x\)来说,独特的点\(y(y\neq x)\)是指不存在\(z\)使得\(dis(y,x)=dis(z,x)\),其中\(x\neq z,y\neq z\)。 每个点有个颜色,对于每个点\(x\)求对于它来说独特的点所包含的颜色种类数
重链剖分 int dep[Z], siz[Z], dad[Z], kid[Z];//kid[rt]:rt的重儿子编号 int dfn[Z], tim, top[Z], rnk[Z];//top[rt]:rt所在重链的顶部节点; rnk[rt]:dfs序为rt的节点编号 void search(int rt, int fa)//寻找重边和重儿子 { dad[rt] = fa, kid[rt] = 0; dep[rt] = dep[fa]
#include <bits/stdc++.h> using namespace std; typedef long long ll; const int maxn = 1e6 + 5; const int mod = 1e9 + 7; const int INF = 2147483647; inline int read() { int x = 0, f = 1; char ch = getchar(); while(ch > '9
题面翻译 题意:给定一颗N个节点组成的树,3种颜色,其中K个节点已染色,要求任意两相邻节点颜色不同,求合法染色方案数。 题目描述 Farmer John has a large farm with \(N\) barns (\(1 \le N \le 10^5\)), some of which are already painted and some not yet painted. Farmer John wan
发生类的初始化(主动): 当虚拟机启动,先初始化main方法所在的类 new一个类的对象 调用类的静态成员(除了final常量)和静态方法 使用java.lang.reflect包的方法对类进行反射调用 当初始化一个类,如果其父类没有被初始化,则先会初始化它的父类 不发生类的初始化(被动): 当访问一个静态域时,
1、无限极分类 //处理父子级 private function getChildBak($data,$parent_id = 0){ $arr=array(); $i = 0; foreach($data as $val){ if($val['pId']==$parent_id){ $val['label'] = $val['
\(\text{Alice}\) 和 \(\text{Bob}\) 在一棵 \(n\) 个节点的树上玩游戏,每个节点初始要么为黑色要么为白色。 \(\text{Alice}\) 先手,轮流选择一个白色点 v,将路径 \((1,v)\) 全部染成黑色。最后不能操作的人为输。 计算 \(\text{Alice}\) 是否必胜以及所有必胜可能的第一步节点的选
给定一棵叶子节点不超过 \(20\) 个的无根树,每个节点上都有一个 \(0\sim 9\) 的数字,求树上本质不同路径条数。两条路径相同是指其路径上所以节点上的数字顺次连结组成的字符串相同。 \(1\le n\le 10^5\)。 如果此题是从根出发的路径,那相当于就是给定了一棵 \(\text{Trie}\) 树,非
什么时候会发生类初始化? 类的主动引用(一定会发生类的初始化) 当虚拟机启动,先初始化main方法所在的类new一个类的对象 调用类的静态成员(除了final常量)和静态方法 使用java.lang.reflect包的方法对类进行反射调用 当初始化一个类,如果其父类没有被初始化,则先
题面 原题 \(n\leq 5000\),加强版 \(n\leq 10^5\),实际上能做 \(n\leq 10^6\)。 长链剖分。做这种很多点满足限制的题,套路差不多。设 \(f_{u,i}\) 表示 \(u\) 子树内到 \(u\) 距离为 \(i\) 的点数,\(g_{u,i}\) 表示 \(u\) 子树内的点对 \((x,y)\) 数量,满足再加一个到 \(u\) 距离为 \(
5.19 Trie树: 用处:快速的查找和高效存储字符串集合的数据结构。 类似如此的查找,存储 其简单的两个操作:插入和删除 插入: void insert(char str[]) { int p; //定义数据前一位的位置 for (int i = 0; i < str[i]; i++) { int u = str[i] - 'a'
题面 虽然 \(n,m\leq 5000\),但是这题是 \(O((n+m)|\Sigma|)\) 的。首先建 \(S\) 的 SAM,拿 \(T\) 上去跑可以得到 \(T\) 每个前缀的匹配区间(在 \(S\) 中只出现一次)。接着建 \(T\) 的 SAM,也可以求出每个前缀在 \(T\) 中只出现一次的区间。做一个区间交,取一个全局 \(\min\) 即可。
题面 对 \(n\) 个串建广义 SAM,每个点开一棵线段树维护 parent 树子树内的所有点都被哪些串走到过。这个直接线段树合并即可。注意分裂出来的点也需要update(我也不知道为何,反正不update会WA)。 点击查看代码 const int N=5e5+13,M=5e5+13,logN=21; int pcnt=0; struct SegTree{int