传送门 ddpddpddp模板题. 题意简述:给你一棵树,支持修改一个点,维护整棵树的最大带权独立集. 思路: 我们考虑如果没有修改怎么做. 貌似就是一个sbsbsb树形dpdpdp,fi,0f_{i,0}fi,0​表示不选iii的最大值,fi,1f_{i,1}fi,1​表示选iii的最大值. 那么可以这样从iii的儿子vvv转移过来: fp,0+=max{fv,0,fv,1},fp,1+=fv,0f_{p,0}+=max\{f_{v,0},f_{v,1}\},f_{p,1}+=f_{v,0}f…
传送门 如同题目所描述的一样,这是一道板题. 题意简述:给你一个数组g1,2,...ng_{1,2,...n}g1,2,...n​并定义f0=1,fi=∑j=1ifi−jgjf_0=1,f_i=\sum_{j=1}^if_{i-j}g_jf0​=1,fi​=∑j=1i​fi−j​gj​,让你求f0,1,...,nf_{0,1,...,n}f0,1,...,n​ 解析 代码 : #include<bits/stdc++.h> #define ri register int #define add…
题目大意:给你一颗$n$个点的树,点有点权,有$m$次操作,每次操作给定$x$,$y$,表示修改点$x$的权值为$y$. 你需要在每次操作之后求出这棵树的最大权独立集的权值大小. 数据范围:$n,m≤1e5$ 我们显然可以得出一个$O(nm)$的暴力做法,每次修改完后$dp$一次,然而这个显然会超时. 考虑当树退化成链时的简单做法. 我们用线段树维护每个区间的答案.对于区间$[l,r]$,我们维护一个$2×2$的答案矩阵$ans$. 设$ans[0][0]$表示区间左端点可能被选择,右端点一定不…
传送门 题意简述:支持在某个历史版本上修改某一个位置上的值,访问某个历史版本上的某一位置的值. 思路: 用主席树直接维护历史版本即可. 代码: #include<bits/stdc++.h> #define ri register int using namespace std; inline int read(){ int ans=0,w=1; char ch=getchar(); while(!isdigit(ch)){if(ch=='-')w=-1;ch=getchar();} whil…
传送门 解析 代码: #include<bits/stdc++.h> #define ri register int using namespace std; typedef long long ll; #define add(a,b) ((a)+(b)>=mod?(a)+(b)-mod:(a)+(b)) #define dec(a,b) ((a)>=(b)?(a)-(b):(a)-(b)+mod) #define mul(a,b) ((ll)(a)*(b)%mod) inline…
传送门 ODTODTODT水题. 题意:有一个字母序列,支持区间赋值,查询区间某个字母的数量,区间按字母序排序. 思路: 可以开262626棵线段树搞过去,然而也可以用ODTODTODT秒掉. 如果用ODTODTODT排序操作可以直接上桶排感觉快到飞起. 不会ODTODTODT的点这儿 代码: #include<bits/stdc++.h> #define ri register int #define fi first #define se second using namespace st…
前言 其实我只是为了过掉模板而写的ddp,实际应用被吊着锤 Solution 并不想写详细的过程 一句话过程:将子树中轻儿子的贡献挂到这个点上面来 详细版:(引用yyb) 总结一下的话,大致的过程是这样子的:首先我们考虑我们的转移方程,发现能够将其改写为矩乘的形式,那么我们首先将转移改为矩乘.我们把轻链和重链的转移分开考虑.这样子想,我们的重链被我们单独拎了出来,每个重链上都挂上了若干轻儿子,显然轻儿子对于重链上的独立集的选择是没有影响的,换而言之,如果轻儿子的贡献考虑完之后,那么等价于链上每个…
To 洛谷.3373 [模板]线段树2 题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某区间每一个数加上x 2.将某区间每一个数乘上x 3.求出某区间每一个数的和 输入输出格式 输入格式: 第一行包含三个整数N.M.P,分别表示该数列数字的个数.操作的总个数和模数. 第二行包含N个用空格分隔的整数,其中第i个数字表示数列第i项的初始值. 接下来M行每行包含3或4个整数,表示一个操作,具体如下: 操作1: 格式:1 x y k 含义:将区间[x,y]内每个数乘上k 操作2: 格式:…
洛谷 P4093 [HEOI2016/TJOI2016]序列 CDQ分治优化DP 题目描述 佳媛姐姐过生日的时候,她的小伙伴从某宝上买了一个有趣的玩具送给他. 玩具上有一个数列,数列中某些项的值可能会变化,但同一个时刻最多只有一个值发生变化.现在佳媛姐姐已经研究出了所有变化的可能性,她想请教你,能否选出一个子序列,使得在任意一种变化中,这个子序列都是不降的?请你告诉她这个子序列的最长长度即可. 输入格式 输入的第一行有两个正整数 \(n,m\),分别表示序列的长度和变化的个数. 接下来一行有 \…
[模板]"动态 DP"&动态树分治 第一道动态\(DP\)的题,只会用树剖来做,全局平衡二叉树什么的就以后再学吧 所谓动态\(DP\),就是在原本的\(DP\)求解的问题上加上修改操作,从而使得问题变成动态的问题 这道题的问题就是普通的树形\(DP\)上加上了修改点权的操作 题意: 给定一棵 \(n\) 个点的树.\(i\) 号点的点权为 \(a_i\).有 \(m\) 次操作,每次操作给定 \(u\),\(w\),表示修改点 \(u\) 的权值为 \(w\).你需要在每次操作…