[Luogu] 树】的更多相关文章

https://www.luogu.org/problemnew/show/P4092 树剖 + 线段树区间修改,单点查询 #include <bits/stdc++.h> using namespace std; ; inline int read() {int ret; scanf("%d", &ret); return ret;} int n, T; , head[N]; ]; int fa[N], top[N], size[N], son[N], deep[…
模板题,对于对为某个点为根的子树进行处理时,只需每个节点记录两个值 分别为搜索以该节点为根的子树时的最初搜索序和最末搜索序,将这两 个数作为线段树区间操作的端点进行操作 #include <bits/stdc++.h> using namespace std; ; #define gc getchar() #define lson jd << 1 #define rson jd << 1 | 1 struct Node_1{ int u, v, nxt; }G[N &l…
https://www.luogu.org/problemnew/show/P3374 单点修改,区间查询 #include <iostream> #include <cstdio> using namespace std; ; #define yxy getchar() int T[N], n, Ty; inline int read() { , f = ; char c = yxy; ; c = yxy;} + c - ', c = yxy; return x * f; } i…
线段树简单入门 递归版线段树 线段树的定义 线段树, 顾名思义, 就是每个节点表示一个区间. 线段树通常维护一些区间的值, 例如区间和. 比如, 上图 \([2, 5]\) 区间的和, 为以下区间的和的和: 我们可以这样定义线段树的一个节点: struct node { int sum; // 维护该节点表示区间的和 int l, r; // 表示该节点表示的左右区间 (然而实现中常常不需要存储, 后面会说到) int lc, rc; // 表示该节点的左右孩子 (然而实现中常常不需要存储, 后…
题目链接:http://www.luogu.org/problem/show?pid=1268#sub -------- 这道题费了我不少心思= =其实思路和标称毫无差别,但是由于不习惯ACM风格的题目,没有打答案之间的换行,wa了好几次 解决所有"构造"问题都要按照如下的步骤: 寻找特例.特征 建立模型 一般化模型 寻找特例 (1) 我们假设结点数为1,显然答案为0,因为这棵树的边集为空. (2) 当结点数为2时,答案就是d[1][2],即(1,2)的距离. (3) 当结点数为3时呢…
CJOJ 1010[NOIP2003]加分二叉树 / Luogu 1040 加分二叉树(树型动态规划) Description 设 一个 n 个节点的二叉树 tree 的中序遍历为( 1,2,3,-,n ),其中数字 1,2,3,-,n 为节点编号.每个节点都有一个分数(均为正整数),记第 j 个节点的分数为 di , tree 及它的每个子树都有一个加分,任一棵子树 subtree (也包含 tree 本身)的加分计算方法如下: subtree 的左子树的加分 × subtree 的右子树的加…
题目大意: 网址:https://www.luogu.org/problemnew/show/2617 给定一个序列a[1].a[2].....a[N],完成M个操作,操作有两种: [1]Q i j k (i,j,k是数字,1≤i≤j≤n, 1≤k≤j-i+1)表示询问指令,询问a[i],a[i+1]--a[j]中第k小的数. [2]C i t (1≤i≤n,0≤t≤10^9)表示把a[i]改变成为t. 数据范围: \(1≤n≤10000,1≤m≤10000\) 解法:带修改的主席树: 原本的主…
https://www.luogu.org/problemnew/show/T45887 题目背景 重阳节到了,我们最好的八重樱拥有全村最好的嘤嘤刀…… 题目描述 在绯玉丸力量的影响下,八重村成了一条长度为 nnn 的八重街,并且绯玉丸可以带着八重樱出现在街上的任意地点.而我们的八重樱则会在街上任意穿梭来获取某一地点上的嘤嘤嘤能量,用以升级她的嘤嘤刀. 在每个时刻,都会发生以下 333 个事件: 111 xxx valvalval 表示在 xxx 地点出现了携带着 valvalval 点嘤嘤嘤能…
题面 给定一棵 \(n\) 个点的树,点带点权. 有 \(m\) 次操作,每次操作给定 \(x,y\) ,表示修改点 \(x\) 的权值为 \(y\) . 你需要在每次操作之后求出这棵树的最大权独立集的权值大小. 题解 如题所示 , 是个模板题 ... 首先考虑静态 \(dp\) , 令 \(dp_{u,0/1}\) 为 \(u\) 不存在 / 存在 于最大权独立集的权值大小 . 然后转移很显然 , 一个点存在于独立集中时 , 儿子全都不能选 . 不存在时 , 儿子可选可不选 . 令 \(v\)…
题目链接 Luogu 4294 (我做这道题的时候BZOJ全站的SPJ都炸了 提交秒WA 幸好有洛谷) 题解 这道题是[斯坦纳树]的经典例题.斯坦纳树是这样一类问题:带边权无向图上有几个(一般约10个)点是[关键点],要求选择一些边使这些点在同一个联通块内,同时要求所选的边的边权和最小. 怎么解决斯坦纳树问题?--其实,就是一种状压DP. \(dp[i][j]\)表示以i号节点为根,当前状态为j(j的二进制中已经与i连通的点对应位置为1). 这个"以i为根"是哪来的呢?其实i可以是联通…