首页 > 其他分享 >P8352 [SDOI/SXOI2022] 小 N 的独立集

P8352 [SDOI/SXOI2022] 小 N 的独立集

时间:2023-10-28 12:12:00浏览次数:35  
标签:状态 le SDOI SXOI2022 P8352 内层 为根 dp 子树内

经典最大独立集问题可设 \(dp_{u,0/1}\) 表示 \(u\) 为根的子树内,不选/选 \(u\) 的独立集最大权。

本题求方案数,且 \(k\) 这么小,暗示我们将上面状态压到维度,设 \(f_{u,i,j}\) 表示以 \(u\) 为根的子树内,\(dp_{u,0}=i,dp_{u,1}=j\) 时的方案数,此时状态数 \(O(n^3k^2)\),转移总复杂度 \(O(n^4k^4)\)。

若要优化我们显然需要缩减状态数,而 dp 套 dp 想要缩减状态数就要从内层 dp 入手。不妨改写内层 dp,设 \(dp'_{u,0/1}\) 表示以 \(u\) 为根的子树内,强制/不强制不选 \(u\) 时的独立集最大权,即 \(dp'_{u,0}=dp_{u,0},dp'_{u,1}=\max(dp_{u,0},dp_{u,1})\)。此时内层 dp 仍然可以转移,且有:

  • \(dp'_{u,0}\le dp'_{u,1}\)
  • \(dp'_{u,1}-dp'_{u,0}\le a_u\le k\)

此时我们可以设新外层 dp \(g_{u,i,j}\) 表示以 \(u\) 为根的子树内,\(dp'_{u,0}=i,dp'_{u,1}=i+j\) 的方案数,此时状态数少 \(n\),转移总复杂度可以达到 \(O(n^2k^4)\)。加上判一些 \(0\) 的转移剪枝即可跑的飞快。

dp 套 dp 的状态优化要从内层 dp 下手,通过改写内层 dp 简化状态信息。

标签:状态,le,SDOI,SXOI2022,P8352,内层,为根,dp,子树内
From: https://www.cnblogs.com/ydtz/p/17793945.html

相关文章

  • P4069 SDOI2016 游戏
    传送门solution树剖后一段路径变成了若干链拼起来。自上而下和自下而上分别维护两棵李超线段树,每条链就是一段数轴,提前处理每个点两种方向上的在链内的横坐标。以最近公共祖先为界,把路径分成两段。从一个点向链的顶端跳就是区间加线段。每次跳完要把线段的截距增加一个横坐标偏......
  • [SDOI2013] 泉
    考虑容斥。我们记至少有\(i\)个指标相同的年份对数为\(f_i\),那么最终答案为:\[\sum_{i=k}^n(-1)^{i-k}\timesf_i\]\(f_i\)可以通过枚举状态,之后通过字符串哈希来计数得到(注意指标只有\(6\)个)。字符串哈希可以把base设为\(10^9+7\),模数设为\(2^64\)(也即unsignedlon......
  • 洛谷P3300 [SDOI2013] 城市规划 题解
    [SDOI2013]城市规划题意:给你一个\(6\timesn\)的网格题,单点修改,询问区间联通块数,\(n\le10^5\)。解:看起来就很显然的一道题......线段树每个点用一个ufs维护连通性;我为了方便思考把图转成横着的了。写起来真是毒瘤......重点在于:\(\bullet\)1、建立叶节点。\(\bull......
  • 解题报告P2486 [SDOI2011] 染色
    P2486[SDOI2011]染色题目链接分两段,最后靠同一条重链合树剖加线段树,典中典。这题的线段树维护比较新颖。线段树中维护这个区间左右端点的颜色和颜色段数量。建树和查询和修改时要判断左区间的右端点和右区间的左端点是否颜色相同。如果不相同,直接将段数相加,否则减一。然......
  • 解题报告 洛谷P2155 [SDOI2008] 沙拉公主的困惑
    P2155[SDOI2008]沙拉公主的困惑题目题面非常的简洁,求\(\sum\limits_{i=1}^{n!}[i\perpm!]\)直接颓式子,\[\begin{aligned}ans&=\dfrac{n!}{m!}\cdot\varphi(m!)\\\\&=\dfrac{n!}{m!}*m!\prod\limits_{p\midm!}[\dfrac{p-1}{p}]\\&=n!\cdot\dfrac{\......
  • 「SDOI2011」 黑白棋
    绷不住了,洛谷上的dp没一个表述清楚了,一怒之下写一篇题解。注意本题解只讲dp部分。首先转化不合法的充要条件就是:设相邻两个棋子中间间隔数量为\(b\),那么对于任意非负整数\(i\)都有\((d+1)|\sum(b\&2^i)\)。其中\(\&\)是按位与运算。所以我们要计数一个有序的并且包含......
  • P4071 [SDOI2016] 排列计数
    LLink显然的,答案就是\(C_n^m*D_{n-m}\)#include<cstdio>#include<iostream>#include<cstring>#include<algorithm>#include<cmath>#include<queue>#include<stack>#include<set>#include<map>#include<ctime......
  • P4071 [SDOI2016] 排列计数
    原题\[\huge{\color{#ff0000}{\text{被XJK搏杀了,我tcl}}}\]我们先从\(n\)个数里选\(m\)个数钦定这些数满足\(a_i=i\),因此原问题就等于让\(n-m\)个数的排列满足\(a_i\neqi\)的排列方案数先说一个错误的做法:设\(dp_i\)表示长为\(i\)的排列的方案数。我们每次枚举一个大小为\(......
  • SDOI2015 序列统计
    题目链接description给定一个质数\(m\),以及\(n,x\)和集合\(S\)。从集合\(S\)中任意选数构成长度为\(n\)的数列(一个数可以选多次),求数列元素乘积模\(m\)等于\(x\)的数列的数量。模\(1004535809\)。\(3\leqm\leq8000\)\(1\leqn\leq10^9\)\(|S|\leqm,0\leqx<m......
  • 【题解】Luogu-P2482 SDOI2010 猪国杀
    写了\(358\)行,\(11.94\mathrm{KB}\),有这么几个地方写挂了:反猪决斗一定选主猪。游戏结束判定是主猪死亡或全部反猪死亡。决斗可能被反杀,之后不能再出牌。点击查看代码#include<bits/stdc++.h>usingnamespacestd;intn,m;charCh[3];queue<char>Deck;in......