bzoj3167 [Heoi2013]Sao】的更多相关文章

传送门 这题神坑啊……明明是你菜 首先大家都知道原题等价于给每个点分配一个$1$~$n$且两两不同的权值,同时还需要满足一些大于/小于关系的方案数. 先看一眼数据范围,既然写明了$n\le 1000$,那就应该是什么$O(n^2)$的做法了.显然这个东西只能是个DP,考虑到题中给出的是一个树形结构,那么就可以利用子树的相对独立性进行DP:设$f_{i,j}$表示以$i$为根的子树中有$j$个点的权值大于$i$的权值时的方案数,显然最终答案就是$\sum_{i}f_{root,i}$. 然后考虑怎…
题意 给定 \(n\) 个节点和 \(n-1\) 个限制,每个节点有一个权值,每个限制形如:\(a_i< a_j\) ,问有多少个 \(1\) 到 \(n\) 排列满足要求. \(n\leq 1000\) . 分析 猜测复杂度为 \(O(n^2)\) ,并且应该要看成是树形结构. 定义状态 \(f_{i,j}\) 表示以 \(i\) 为根的子树内有 \(j\) 个节点权值 \(< a_i\)的合法方案数. 考虑转移,记 \(v\) 为 \(u\) 的儿子,有两种情况: \(a_u > a…
[BZOJ3167][HEOI2013]SAO(动态规划) 题面 BZOJ 洛谷 题解 显然限制条件是一个\(DAG\)(不考虑边的方向的话就是一棵树了). 那么考虑树型\(dp\),设\(f[i][j]\)表示当前点\(i\)在其子树内的排名为\(j\)的方案数. 每次考虑加入一棵子树,即考虑把\(f[v][k]\)加入到\(f[u][i]\)的贡献中. 分类讨论,如果\(v\)应当在\(u\)之前,枚举\(v\)的子树内一共有多少个点在\(u\)之前,那么假设\(u\)当前的序列长度为\(x…
[BZOJ3167][Heoi2013]Sao Description WelcometoSAO(StrangeandAbnormalOnline).这是一个VRMMORPG,含有n个关卡.但是,挑战不同关卡的顺序是一个很大的问题.有n–1个对于挑战关卡的限制,诸如第i个关卡必须在第j个关卡前挑战,或者完成了第k个关卡才能挑战第l个关卡.并且,如果不考虑限制的方向性,那么在这n–1个限制的情况下,任何两个关卡都存在某种程度的关联性.即,我们不能把所有关卡分成两个非空且不相交的子集,使得这两个子集…
3167: [Heoi2013]Sao 题意: n个点的"有向"树,求拓扑排序方案数 Welcome to Sword Art Online!!! 一开始想错了...没有考虑一个点的孩子可以排在父亲后... 为了能转移,给状态加一维,\(f[i][j]\)表示子树i,i排在第j位的方案数 然后,很像树形背包啊,转移枚举孩子子树中k个点在i之前,更新\(f[i][j+k]\) 严格做到每次合并复杂度为 **"已经合并大小*正要合并进去的大小",那么这个复杂度就是\(O…
P4099 [HEOI2013]SAO 贼板子有意思的一个题---我()竟然没看题解 有一张连成树的有向图,球拓扑序数量. 树形dp,设\(f[i][j]\)表示\(i\)在子树中\(i\)拓扑序上排名为\(j\)的方案数. 难就难在转移,现在有两个树\(x\)和\(y\),其中\(x\)是父亲,\(x\)的拓扑序小于\(y\)的,从\(f[x][p1],f[y][p2]\)转移到\(newf[x][p3]\):\(x\)在原序列中排名\(p1\),新序列中\(p3\):\(y\)在原序列中排名…
3167: [Heoi2013]Sao Time Limit: 30 Sec  Memory Limit: 256 MBSubmit: 96  Solved: 36[Submit][Status][Discuss] Description WelcometoSAO(StrangeandAbnormalOnline).这是一个VRMMORPG,含有n个关卡.但是,挑战不同关卡的顺序是一个很大的问题.有n–1个对于挑战关卡的限制,诸如第i个关卡必须在第j个关卡前挑战,或者完成了第k个关卡才能挑战第l…
P4099 [HEOI2013]SAO 我们设$f[u][k]$表示以拓扑序编号为$k$的点$u$,以$u$为根的子树中的元素所组成的序列方案数 蓝后我们在找一个以$v$为根的子树. 我们的任务就是在合并这两棵树时维护$f[u][k]$ 合并时,$v$的元素可能全在点$u$的前/后面,也可能都有. 分类讨论: 1.当有$p(p\in [0,siz[v]])$个元素插入到点$u$(拓扑序)前面时 我们知道插入后点$u$的拓扑序为$k$ 那么插入前的拓扑序即为$k-p$ ∴插入前子树$u$对应的状态…
[HEOI2013]SAO (这写了一个晚上QAQ,可能是我太蠢了吧.) 题目说只有\(n-1\)条边,然而每个点又相互联系.说明它的结构是一个类似树的结构,但是是有向边连接的,题目问的是方案个数,那么首先想到的肯定是树上dp. 但是这题有向边,从一个点出发,不一定可以遍历整棵树.那么肯定要对每条边建反边,打个标记分类讨论. 解决了建模的问题,接下来就是怎么dp了. 容易发现这个其实就是求这个"类树形图"的拓扑排序方案数,然而我们知道拓扑排序的方案计数是个NP问题,用状压解决,这题有&…
P4099 [HEOI2013]SAO 类型:树形 \(\text{DP}\) 这里主要补充一下 \(O(n^3)\) 的 \(\text{DP}\) 优化的过程,基础转移方程推导可以参考其他巨佬的博客(题解). 令 \(f[x][p]\) 表示在以 \(x\) 为根的子树中,\(x\) 在拓扑序排在第 \(p\) 个时的方案数. 转移中设 \(x\) 在已经合并的拓扑序中排名为 \(p_1\) ,将要合并的子树(以 \(ver\) 为根)中 \(ver\) 排名为 \(p_2\) ,合并后 \…
题目描述 Welcome to SAO ( Strange and Abnormal Online).这是一个 VR MMORPG, 含有 n 个关卡.但是,挑战不同关卡的顺序是一个很大的问题. 有 n – 1 个对于挑战关卡的限制,诸如第 i 个关卡必须在第 j 个关卡前挑战, 或者完成了第 k 个关卡才能挑战第 l 个关卡.并且,如果不考虑限制的方向性, 那么在这 n – 1 个限制的情况下,任何两个关卡都存在某种程度的关联性.即, 我们不能把所有关卡分成两个非空且不相交的子集,使得这两个子…
题目大意: Welcome to SAO ( Strange and Abnormal Online).这是一个 VR MMORPG, 含有 n 个关卡.但是,挑战不同关卡的顺序是一个很大的问题. 有 n – 1 个对于挑战关卡的限制,诸如第 i 个关卡必须在第 j 个关卡前挑战, 或者完成了第 k 个关卡才能挑战第 l 个关卡.并且,如果不考虑限制的方向性, 那么在这 n – 1 个限制的情况下,任何两个关卡都存在某种程度的关联性.即, 我们不能把所有关卡分成两个非空且不相交的子集,使得这两个…
传送门 吐槽题目标题 这个依赖关系是个树,可以考虑树型dp,设f_i表示子树i的答案 因为这是个序列问题,是要考虑某个数的位置的,所以设\(f_{i,j}\)表示子树i构成的序列,i在第j个位置的方案.转移依次合并儿子\(y\),每次枚举一个位置j,以及枚举儿子\(y\)的序列中有k个数放在插前面,可以得到\(f_{x,j+k}\leftarrow f_{x,j}*w*\binom{j-1+k}{k}*\binom{sz_x+sz_y-j-k}{sz_y-k}\),组合数即考虑插入的方式 还有一…
传送门 值得注意的是一般的DAG的拓扑序列数量是NP问题,所以不能直接入手 题目中给出的图可以看做是一个树形图,虽然方向比较迷.考虑使用树形图的性质 不妨任选一个点为根做树形DP,注意到数的位置与方案数相关,所以也要设在状态内.故设\(f_{i,j}\)表示对于\(i\)及\(i\)的子树所有点构成的拓扑序列,\(i\)排在第\(j\)位的方案数,通过一个儿子一个儿子地合并来转移. 对于当前计算的点\(u\)的某一个儿子\(v\)已经算完,正要和\(u\)合并.设\(sz_u\)表示\(u\)和…
题目大意: 一个有向无环图上有n个结点, 现在告诉你n-1个条件(x,y),表示x和y的先后关系. 问原图共有几种可能的拓扑序? 思路: 树形DP. f[i][j]表示对于第i个结点,有j个点在它前面的方案数. 设当前结点为x,后面有一个结点为y,原本x前有i个结点,y前有j个结点,我们可以得到状态转移方程: f[x][size[x]-i+size[y]-j]+=f[x][size[x]-i]*c[i+j][i]*c[size[x]-i+size[y]-j][size[y]-j]*((sum[y…
传送门 HEOI的题好珂怕啊(各种意义上) 然后考虑树形dp,以大于为例 设$f[i][j]$表示$i$这个节点在子树中排名第$j$位时的总方案数(因为实际只与相对大小有关,与实际数值无关) 我们考虑如果从当前子树中弄出$k$个节点,其他子树中弄出$j-1$个节点,那么当前节点的大小排名就是$k+j$ 然后考虑一下,如果我们不看这个子树,根节点排在第$j$个,方案数是$f[i][j]$,如果只看此子树,此子树的根就是根节点的儿子,它在此子树中的排名可能是$1,2,...k$,那么我们就需要记录一…
BZOJ4824的强化版. 改变枚举的方案,使用前缀和进行DP优化. 然后复杂度就是$O(n^2)$了. #include <map> #include <cmath> #include <queue> #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; #define F(i,…
题目:https://www.luogu.org/problemnew/show/P4099 结果还是看了题解才会…… 关键是状态,f[ i ][ j ] 表示 i 子树. i 号点是第 j 个出现的方案数. 合并的时候,很重要的是去枚举孩子 v 有 k 个点放在了第 i 个点前面.这样 v 可以在的位置就根据该边是 > 还是 < 而是一个前/后缀.这样就是 n2 的了. #include<iostream> #include<cstdio> #include<c…
正解:树形$dp$ 解题报告: 传送门$QwQ$. 考虑设$f_i$表示点$i$的子树内的拓扑序排列方案数有多少个. 发现这样不好合并儿子节点和父亲节点.于是加一维,设$f_{i,j}$表示点$i$的子树中点$i$在拓扑序中排名为$j$的拓扑序排列方案数有多少个$QwQ$ 然后说下儿子节点$x$和父亲节点$y$的合并,就枚举下点$y$前面有多少个原属于$y$的点有多少个原属于$x$的点. 若要求是$x>y$,就$f_{y,k}=\sum_{i=1}^{k} \sum_{j=k-i+1}^{siz…
题面传送门 题意: 有一个有向图 \(G\),其基图是一棵树 求它拓扑序的个数 \(\bmod (10^9+7)\) \(n \in [1,1000]\) 如果你按照拓扑排序的方法来做,那恐怕你已经想偏了.因为"求拓扑排序个数"本身就是一个 NP 问题,只能使用指数级的状压 \(dp\) 一类的算法来解决,而本题数据范围给到 \(1000\),暗示着我们要充分利用"\(G\) 的基图是一棵树"这个条件. 故可以想到树形 \(dp\).\(dp[x][i]\) 表示将…
树形dp专题总结 大力dp的练习与晋升 原题均可以在网址上找到 技巧总结 1.换根大法 2.状态定义应只考虑考虑影响的关系 3.数据结构与dp的合理结合(T11) 4.抽直径解决求最长链的许多类问题(T12) 5.dp题最基本的考察是对题意模型的转化,以应用在各个方面 6.前缀和等技巧优化dp 7.树形背包是n*n的! T1 BZOJ1304 [CQOI2009]叶子的染色 首先是对于固定根节点的\(dp\) \(dp\)状态\(dp[3]\)为子树还需要颜色\(1,2\),或不需要 转移比较简…
转载请注明原文地址:http://www.cnblogs.com/LadyLex/p/7337179.html 树形DP是一种在树上进行的DP相对比较难的DP题型.由于状态的定义多种多样,因此解法也五花八门,经常成为高水平考试的考点之一. 在树形DP的问题中,有这样一类问题:其数据范围相对较小,并且状态转移一般与两两节点之间的某些关系有关. 今天,我们就来研究一下这类型的问题,并且总结一种(相对套路的)解决大多数类型题的思路. 首先,我们用一道相对简单的例题来初步了解这个类型题的大致思路,以及一…
(总计:共90题) 3.10~3.16:17题 3.17~3.23:6题 3.24~3.30:17题 3.31~4.6:21题 4.7~4.12:29题 ZJOI&&FJOI(6题) TJOI2016(6题) 六省联考2017(6题) SDOI2016(3题) HNOI2013(6题) CQOI2017(3题) 九省联考2018(3题) 3.10 [BZOJ4552][TJOI2016&&HEOI2016]排序(二分答案+线段树) [BZOJ4012][HNOI2015]开…
4824: [Cqoi2017]老C的键盘 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 193  Solved: 149[Submit][Status][Discuss] Description 老 C 是个程序员.     作为一个优秀的程序员,老 C 拥有一个别具一格的键盘,据说这样可以大幅提升写程序的速度,还能让写出来的程序 在某种神奇力量的驱使之下跑得非常快.小 Q 也是一个程序员.有一天他悄悄潜入了老 C 的家中,想要看看这个 键盘究…
HNOI2015 亚瑟王(概率DP) 根据期望的线性性,我们只需要算出每一种卡牌触发的概率就可以算出期望的值 考虑与第\(i\)张卡牌触发概率相关的量,除了\(p_i\)还有前\(i-1\)张卡牌中触发过的卡牌的数量. 假设前\(i\)张卡牌中触发了\(j\)张的概率为\(f_{i,j}\),那么第\(i\)张卡牌的触发概率就是\(\sum f_{i-1,j} \times (1 - (1 - p_i)^{R - j})\) 一个不好理解的地方:对于某一张卡牌,它触发的概率与之前卡牌在哪一个回合…
前缀和优化 当DP过程中需要反复从一个求和式转移的话,可以先把它预处理一下.运算一般都要满足可减性. 比较naive就不展开了. 题目 [Todo]洛谷P2513 [HAOI2009]逆序对数列 [Done]洛谷P2511 [HAOI2008]木棍分割 [Done]洛谷P4099 [HEOI2013]SAO [Done]NOIAC37 染色 单调队列优化 前置技能:单调队列(经典的问题模型:洛谷P1886 滑动窗口) 用于优化形如\(f_i=\min/\max_{j=l_i}^{i-1}\{g_…
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem 10983 18765 Y 1036 [ZJOI2008]树的统计Count 5293 13132 Y 1588 [HNOI2002]营业额统计 5056 13607 1001 [BeiJing2006]狼抓兔子 4526 18386 Y 2002 [Hnoi2010]Bounce 弹飞绵羊 43…
Problem 给你n个任务,n-1个关系,ab代表a在b前或者a在b后 问你有几种拓扑序 Solution f[i][j]表示第i个节点前有j个节点的方案数 设当前节点为x,儿子节点为s,若x依赖于s,那么 若s依赖于x,那么 Notice 要预处理出C数组 Code #include<cmath> #include<cstdio> #include<cstring> #include<iostream> #include<algorithm>…
可持久化Trie+set Orz zyf…… 搞区间中次大值不好搞,那么我们就反过来,找一个数,然后看它在哪些区间里是次大值…… (然而事实上我们并不用真的把这个区间具体是什么找见,只要知道它可以跟哪一段数搞Xor就可以了! 而这个区间就是……左边第二个比他大的数的位置+1 ~ 右边第二个比它大的数的位置-1 这中间所有数都可以跟它搞Xor= =,我们总能找到一个相应的区间…… (我一开始理解成,这个区间就是我们要找的,a[i]为次大数的区间,然而这不是左边有一个比它大的,右边也有一个比它大的吗…
树形DP 这题在考场上直接写的TreeDP……当时也没想出一个像样的暴力来对拍……好像只能这么直接做了……? 都说是博弈树了,转移关系都给的这么直接了……也没啥难度了吧= =(怪不得大家都不愿意写题解) 我的思路是这样的: 如果黑方想赢,那么: 1.在一个决策方为黑方的节点,对于它来说,最小黑方胜集合就是所有儿子中最小的那个 最小黑方胜集合 2.在一个决策方为白方的节点,它的最小黑方胜集合是所有儿子的最小黑方胜集合的并 那么现在我们就可以通过子节点的最小黑方胜集合,推出在某个节点状态下的最小黑方…