摘要:
其实在tzt版线段树的基础上稍微加一些东西就好了。我们不预先开点,每当需要用到一个点时,我们才开。空间复杂度可以优化到 m(查询)log n。 code(线段树1,其实这道题用动态开点没啥意义没啥意义,当作练习) include include include include include inc 阅读全文
摘要:
拓扑排序的运用 这道题目其实要加入线段树优化建边,但是本蒟蒻不会。说一下简化版。我们自然可以想到拓扑排序。就是令u v表示u大于v,然后利用题目给予的信息加边,最后拓扑上dp就可以了。dp过程:令所有点的初始值设为1e9,在拓扑的过程中为未知的点赋值,如果发生冲突则不能。但是边太多,需要优化,我们要 阅读全文
摘要:
树论 一道大水题,直接放代码: code: include include include include include define int long long define half (l+r) 1 const int maxn=2000006; using namespace std; in 阅读全文
摘要:
线段树。 这道题乍一看是道dp,但是发现1e6的范围。。。~~~(N^2过百万)~~~并且有后效性qaqqqqqq...... 我的思路是这样的:考虑暴力,我们每次枚举左端点,O(n)求和,复杂度N^2。如何优化呢?考虑前缀和,当我们扫过某个点后会对答案产生什么影响?设NXT[ i ]表示i点之后第 阅读全文
摘要:
思维题,套路题。 本来想在学完树形dp,开始做数据结构前~~刷几道水题~~愉悦一下身心,结果tm直接匹配了一道不用树形dp十分有意思的题 思路:考虑题目的转化:将删除的边数最小转化为留下的权值最大,用kruskal的思想加边,如果两点都是敌人直接切,如果一方是敌人,先不管,将另一方感染为敌人。这也是 阅读全文
摘要:
树形dp碾压标算 这道题目我写了60分的暴力(N^2 k),没有优化,只是说一说树形dp相关。 这道题我们可以转化一下,我们可以考虑每一个点对答案的贡献。这道题可以转化为以该点为根的树中包含根的连通块,且其中有k个点大于等于根的危险度的方案数。这里“等于”有一定的问题,就是同一种连通块可能会被其他的 阅读全文
摘要:
fij表示在dfs序序列上做了前i个点,已经选择了j个人的最大权值和。 那么如果这个点选fij− fi+1,j+1 如果不选fij− fi+sizei,j(表示跳过子树转移) code: for(i=1;i 阅读全文
摘要:
树形背包dp,求整体贡献。 别的树形dp一般是考虑子树的最优解,但这道题由于每次转移都会对全局提供贡献,所以我们考虑贡献。令dp[i][j]表示以i为根的子树选j个点最多能为最终答案做的贡献。那么这道题就转化为了树形背包dp,转移方程: 注意特判 code include include inclu 阅读全文
摘要:
树形dp 大水题,直接放代码了qwq(第二位用0 1 2表示三种状态,大力dp就好了) include include include include include include include include using namespace std; const int maxn=100006 阅读全文
摘要:
树形dp 题目大意: 一个n结点的有根树,树边权均为正数,现在有q次询问,每次询问一个距离,问这个距离从0号点出发最多能经过多少点,同一结点多次经过算1次。 n include include include include include include using namespace std; 阅读全文