bzoj3836】的更多相关文章

题目链接 BZOJ3836 题解 显然这是个\(NP\)完全问题,此题的解决全仗任意两点间不存在节点数超过10的简单路径的性质 这意味着什么呢? \(dfs\)树深度不超过\(10\) \(10\)很小呐,可以状压了呢 我们发现一个点不但收祖先影响,而且受儿子影响,比较难处理 我们就先处理该点及其祖先,然后更新完儿子之后反过来用儿子更新根,就使得全局合法了 一个点显然有三种状态: 0.没被覆盖 1.被覆盖但是没有建站 2.建站 设\(f[d][s]\)表示节点\(u\)[深度为\(d\)],其祖…
对于一个连通块,取一个点进行dfs,得到一棵dfs搜索树,则这棵树的深度不超过10,且所有额外边都是前向边. 对于每个点x,设S为三进制状态,S第i位表示根到x路径上深度为i的点的状态: 0:选了 1:没选,且没满足 2:没选,且已满足 设f[i][j]表示考虑根到x路径上深度为i的点时这些点的状态为j时的最小费用,然后按DFS序进行DP即可. 时间复杂度$O((n+m)3^{10})$,空间复杂度$O(10\times3^{10})$. #include<cstdio> const int…
状压dp 图上怎么跑dp?我们跑三进制状压dp,0表示选了,1表示既没选也没覆盖,2表示没选但是被覆盖了. 状态是dp[dep][S]表示当前走到了深度为dep的节点,状态为S,按照dfs序转移 每次转移就是计算这个点选了没选,然后像树形dp一样更新节点 返祖边也要处理 #include<bits/stdc++.h> using namespace std; ; int n, m, ans; vector<int> G[N]; ][N], c[N], vis[N], bin[],…
持续更新!! DP的难点主要分为两类,一类以状态设计为难点,一类以转移的优化为难点. DP的类型 序列DP [例题]BZOJ2298 problem a 数位DP 常用来统计或者查找一个区间满足条件的数,然后按数位顺序DO,一般需要仔细分情况讨论,常见处理如把区间拆为\([1,l),[1,r]\),记忆化,预处理等. [例题]BZOJ3131 淘金 概率DP 概率DP是对一类求时间概率或者期望概率DP的总称. 对于求概率问题,有时利用补集转化,有时将其转化为计数问题.求期望大多利用期望的线性性来…
POI2014题解 [BZOJ3521][Poi2014]Salad Bar 把p当作\(1\),把j当作\(-1\),然后做一遍前缀和. 一个合法区间\([l,r]\)要满足条件就需要满足所有前缀和\(\ge 0\),所有后缀和\(\ge 0\),也就是\(\forall i\in[l,r],sum_i-sum_{l-1}\ge 0,sum_r-sum_{i-1}\ge 0\). 也就是说\(sum_{l-1}\)要是\([l-1,r]\)内的最小值,\(sum_r\)要是\([l-1,r]\…