动态dp 板子】的更多相关文章

动态dp 瞎扯两句吧 先从序列上理解,维护链的最大独立集. 考虑是从左边转移的,那么矩阵的转移唯一,直接放在线段树上就可以了. 放在树上的话,儿子都可以转移,把轻儿子的转移放在子链链头更新,然后每条链都处理成序列就行了. 注意一点,因为维护的是序列,所以单点存放的矩阵是只含轻儿子和自己的贡献,相当于把轻儿子的子树缩给了自己,而重儿子维护的东西是通过线段树上维护的区间贡献过来的. 咕咕模板,最大全独立集 Code: #include <cstdio> #include <algorithm…
题意 题目链接 Sol 动态dp板子题.有些细节还没搞懂,待我研究明白后再补题解... #include<bits/stdc++.h> #define LL long long using namespace std; const int MAXN = 1e5 + 10, INF = INT_MAX; template<typename A, typename B> inline bool chmax(A &x, B y) { return x < y ? x = y…
题目描述 给定一棵 n 个点的树,点带点权. 有 m 次操作,每次操作给定 x,y,表示修改点 x 的权值为 y. 你需要在每次操作之后求出这棵树的最大权独立集的权值大小. 输入格式 第一行有两个整数,分别表示结点个数 n 和操作个数 m. 第二行有 n 个整数,第 i 个整数表示节点 iii 的权值 ai. 接下来 (n−1) 行,每行两个整数 u,v,表示存在一条连接 u 与 v 的边. 接下来 m 行,每行两个整数 x,y,表示一次操作,修改点 x 的权值为 y. 输出格式 对于每次操作,…
luogu传送门. 最近学了一下动态dp,感觉没有想象的难. 动态DP simple的DP是这样的: 给棵树,每个点给个权值,求一下最大权独立集. 动态DP是这样的: 给棵树,每个点给个权值还到处改,每次改的时候求一下最大权独立集. 题外话: ($NOIP2018$保卫王国) 大佬:动态$dp$板子直接秒. 神仙:这个是什么让我想一想--倍增?(然后当场切掉) 除了大佬除了神仙除了我:敲暴力. 我:(看错题了爆蛋) 几个前置知识: (1)重链剖分 树剖时选择子树点数最多的儿子作重儿子. 重剖有几…
国际惯例的题面:看起来很神的样子......如果我说这是动态DP的板子题你敢信?基于链分治的动态DP?说人话,就是树链剖分线段树维护DP.既然是DP,那就先得有转移方程.我们令f[i]表示让i子树中的叶子节点全部与根不联通,所需要的最小代价,v[i]为输入的点权.显然f[i]=min(v[i],sigma(f[soni])),边界条件是,如果i是叶子节点,则f[i]=v[i].我们需要用链分治去维护这个DP,所以要把DP拆成重链和轻链独立的形式.我们还是用f[i]表示让i子树中的叶子节点全部与根…
题解 在冬令营上听到冬眠的东西,现在都是板子了猫锟真的是好毒瘤啊(雾) (立个flag,我去thusc之前要把WC2018T1乱搞过去= =) 好的,我们可以参考猫锟的动态动态dp的课件,然后你发现你什么都看不懂(菜啊 但是我们仔细看一看,可以发现用数据结构维护矩阵,那么我们尝试构造一个矩阵 \(\begin{bmatrix} \ g_{u,0} & g_{u,0}\\ g_{u,1} & 0 \end{bmatrix} \begin{bmatrix} f_{son[u],0}\\ f_{…
题目 尽管知道这个东西应该不会考了,但是还是学一学吧 哎要是去年noip之前学该多好 动态\(dp\)就是允许修改的一个\(dp\),比如这道题,我们都知道这是一个树上最大点权独立集 众所周知方程长这个样子 \[dp_{u,0}=\sum_{(u,v)\in e}min(dp_{v,0},dp_{v.1})\] \[dp_{u,1}=a_v+\sum_{(u,v)\in e}dp_{v,0}\] 但是有了修改我们就没有办法做了 写不下去了,挂一个yyb跑路吧 大概就是一句话,维护处每一个点的轻儿…
是动态dp的板子 大致思想就是用g[u]来表示不包含重链转移的dp值,然后用线段树维护重链,这样线段树的根就相当于这条重链的top的真实dp值 每次修改的时候,修改x点会影响到x到根的真实dp值,但是只会影响到每条重链的低端点的dp值,相当于在log个线段树上单点修改 #include<iostream> #include<cstdio> using namespace std; const int N=200005; int n,m,a[N],h[N],cnt,de[N],fa[…
题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=5210 题解 令 \(dp[x][0]\) 表示以 \(x\) 为根的子树中的包含 \(x\) 的连通块的点权和最大值,\(dp[x][1]\) 为 \(x\) 的所有孩子中的子树的连通块点权和最大值. 于是有这样的式子: \[ dp[x][0] = \max(w_x+\sum_{y\in child_x} dp[y][0], 0)\\dp[x][1] = \max_{y\in child_x…
模版 动态 dp 终于来写这个东西了.. LG 模版:给定 n 个点的数,点有点权, $ m $ 次修改点权,求修改完后这个树的最大独立集大小. 我们先来考虑朴素的最大独立集的 dp \[dp[u][0] = \sum_v max\{dp[v][1],dp[v][0]\}\\dp[u][1] = val[u] + \sum_v dp[v][0] \] 现在我们就拥有了一个 $ O(nm) $ 的做法,但是明显它不优秀. 既然支持修改,我们可以考虑树剖(或者LCT),现在树被我们剖成了重链和轻链.…