05 2018 档案
摘要:题目链接 "BZOJ2277" 题解 orz太难了 如果一个数是密码,那么所有的倍数都是密码 如果两个数是密码,那么所有的倍数都是密码 那么如果最后的密码集合为那么一定存在一个是剩余所有数的 所以我们只需找最小的$x
阅读全文
摘要:题目链接 "BZOJ2553" 题解 话说在前,此题卡精度,最好开long double 先建自动机 求期望,逆着求,设为长度为的串,当前匹配AC自动机节点,之后能产生伤害的期望值 枚举转移,如果转移到一个单词节点,因为产生伤害的单词间不能相连,就直接跳回根节点
阅读全文
摘要:题目链接 "ZOJ3874" 题意简述: 在一个序列中,两点间如果有边,当且仅当两点为逆序对 给定一个序列的联通情况,求方案数对取模 题解 自己弄了一个晚上终于弄出来了 首先一下发现一个很重要的性质: 联通块内的点编号必须是连续的 证明: 假设一个联通块编号不连续,设,
阅读全文
摘要:题目链接 "BZOJ4503" 题解 水水题。 和残缺的字符串那题几乎是一样的 同样转化为多项式 同样TLE 同样要手写一下复数才A C++ include include include include include include include define Redge(u) for (in
阅读全文
摘要:题目链接 "BZOJ2697" 题解 好水好水的贪心。。。 容易发现每种特技只表演两次,多表演没有意义,而且差距越长收益越大 然后就可以贪,最大的放两端,次大的往里,然后是第三大....... 证明很简单,假设将两个特技时间交换,那么会产生交换距离乘以的差值的贡献,显然就不优
阅读全文
摘要:题目链接 "BZOJ2795" "BZOJ2890" "BZOJ3647" 题解 三倍经验! 我们要快速求区间最小循环节 我们知道循环节有如下性质: ①当为循环节长度,那么且 ②如果为循环节,那么$L x
阅读全文
摘要:题目链接 "BZOJ2823" 题解 "最小圆覆盖" 模板 都懒得再写一次 C++ include include include include include include include define LL long long int define Redge(u) for (int k =
阅读全文
摘要:题目链接 "BZOJ2924" 题解 题面有误。。是 如果两个点间连线与轴夹角在以内,那么它们之间连边 求最小路径覆盖 = 最长反链 由于比较难搞,我们利用复数翻转一下,逆时针旋转 这样就求一条从左上到右下的最长链 我们将所有点按排序,令$f[i]
阅读全文
摘要:题目链接 "洛谷P3759" 题解 树状数组套主席树板题 C++ include include include include include include define Redge(u) for (int k = h[u],to; k; k = ed[k].nxt) define REP(i,
阅读全文
摘要:题目链接 "BZOJ4539" 题解 我们把每次复制出来的树看做一个点,那么大树实际上也就是一棵个点的树 所以我们只需求两遍树上距离: 大树上求距离,进入同一个点后在模板树上再求一次距离 讨论好一些情况即可 然后求子树第大的点要用主席树 没了 C++ include include
阅读全文
摘要:题目链接 "Mychael vs Kid" 题解 先说说这题的由来及前身 前身 首先有一个很经典的题目: 维护区间加,查询区间 如果强行用线段树维护的话,区间加之后就没法直接确定当前区间的,不可直接维护 这个时候就用到了的一个性质: $$(a,b) = (a b,b)$
阅读全文
摘要:题目链接 "BZOJ2668" 题解 容易想到由向初始的黑点连边,由终态的黑点向连边,然后相邻的点间连边 但是这样满足不了交换次数的限制,也无法计算答案 考虑如何满足一个点的交换次数限制 当然是拆点 但是一个位置被经过时会被交换两次,而终点和起点都只交换了一次 那么我们就拆成三个点$le
阅读全文
摘要:题目链接 "BZOJ1596" 题解 先抽成有根树 设表示以为根,儿子都覆盖了,父亲是否覆盖,父亲是否建塔的最少建塔数 转移一下即可 C++ include include include include include include define Redge
阅读全文
摘要:题目链接 "BZOJ3427" 题解 容易发现最终序列一定是组成的 因为如果有一个位置不是,那么这个位置一定大于,那么上一个位置一定为,所以该位置一定加到过。由于已经满足条件,而经分析得大于会使下一个位置的决策不优反劣,所以一定不会大于 那
阅读全文
摘要:题目链接 "BZOJ3526" 题解 思来想去,发现很显然可以用线段树维护 每个区间保存所有合法方案的左右端点【当左端点一定是,右端点当然存最小的那个就行了】 这么整的数,的概率啊23333
阅读全文
摘要:题目链接 "BZOJ3542" 题解 线段树裸题,,对每一行每一列开线段树 由于坐标很大,用维护根下标 化一下式子,只用维护区间和,区间平方和,区间存在的个数 C++ include include include include include include define Redge(
阅读全文
摘要:题目链接 "BZOJ3832" 题解 神思路orz,根本不会做 设为到的最长路,为出发的最长路,二者可以拓扑序后求得 那么一条边的对应的最长链就是 我们人为加入源汇点,,向每个点连边,每个点
阅读全文
摘要:题目链接 "BZOJ5月月赛" 题解 好弱啊QAQ只写出三题 A 判断多干个数乘积是否是某个数的倍数有很多方法,比较常用的是取模,但这里并不适用,因为模数不定 会发现数都比较小,所以我们可以考虑分解质因子,查找一下区间各个质因子数是否符合要求 用主席树维护即可 由于以内不同质因子数最多的
阅读全文
摘要:题目链接 "BZOJ3523" 题解 简单的贪心题 优先与上一个不一样且数量最多的,如果有多个相同,则优先选择非结尾颜色 比较显然,但不知怎么证 C++ include include include include include include include define Redge(u) f
阅读全文
摘要:题目链接 "BZOJ1599" 题解 最小环模板?周末了养生一下【逃】 解释一下原理 算法每一轮求出以为中介点的最短路 我们对于一个环,考虑环上编号最大的点,在枚举到那个点时,两边的点之间不经过的最短路已经计算出来,相连接便是一个环 容易发现最小的环一定
阅读全文
摘要:题目链接 "BZOJ4245" 题解 套路① 位运算当然要分位讨论,高位优先 考虑在下,如果该位为,则每一位都为 套路② 我们选m段异或和,转化为个前缀和的点,且其中有一个是 容易发现,该位结果要为0,则选取的前缀和该位都为 所以贪心查找所有该位为的,首先
阅读全文
摘要:题目链接 "BZOJ4873" 题解 题意很鬼畜,就可以考虑网络流【雾】 然后就会发现这是一个裸的最大权闭合子图 就是注意要离散化一下代号 C++ include include include include include include define Redge(u) for (int k =
阅读全文
摘要:题目链接 "BZOJ4144" 题解 这题好妙啊,,orz 假设我们在一个非加油站点,那么我们一定是从加油站过来的,我们剩余的油至少要减去这段距离 如果我们在一个非加油站点,如果我们到达不了任意加油站点,我们一定废了 那么我们在一个非加油站点,就一定可以到达最近的加油站,而由于我们剩余的油是要减去到
阅读全文
摘要:题目链接 "BZOJ3747" 题解 这种找区间最优的问题,一定是枚举一个端点,然后用数据结构维护另一个端点 我们枚举左端点,用线段树维护每个点作为右端点时的答案 当左端点为时,我们能预处理出每个位置的答案初始化线段树 当左端点右移一位时,该位上的电影就从区间删除了,记$nxt[i
阅读全文
摘要:题目链接 "BZOJ3709" 题解 贪心很显然 我们先干掉能回血的怪,当然按照升序顺序,因为打得越多血越多,大的尽量往后打 然后再干掉会扣血的怪,当然按照降序顺序,因为最后受的伤害一定,回的血也一定,先尽量回多的血以尽量承受住当前伤害 C++ include include in
阅读全文
摘要:题目链接 "BZOJ3714" 题解 我们如果知道了所有的数,同样就知道了所有的前缀和 相反,我们如果求出了所有前缀和,就知道了所有的数,二者是等价的 对于一个区间如果我们知道了前缀和,我们就知道了 所以区间相当于连接和
阅读全文
摘要:题目链接 "BZOJ3922" 题解 考虑暴力,修改,查询 考虑线段树,如果对每种差值建一棵线段树,修改,查询 能不能均摊? 线段树查询快,修改慢 暴力修改快,查询慢 容易发现当比较大时暴力还是可以接受的,所以我
阅读全文
摘要:题目链接 "BZOJ3495" 题解 每个城市都有选和不选两种情况,很容易考虑到2 sat 边的限制就很好设置了,主要是每个郡只有一个首都的限制 我们不可能两两之间连边,这样复杂度就爆炸了 于是乎就有了一个非常厉害的方法: 前缀后缀和 我们令表示选,表示不选,维护一个郡的前缀和、后缀和
阅读全文
摘要:题目链接 "BZOJ2597" 题解 orz思维差 既然是一张竞赛图,我们选出任意三个点都可能成环 总方案数为 如果三个点不成环,会发现它们的度数是确定的,入度分别为,出度为 所以一个点的任意两个入度,都会对答案产生一个负的贡献 所以三
阅读全文
摘要:题目链接 "hdu6184" 题解 题意是让我们找出所有的这样的图形: 我们只需要求出每条边分别在多少个三元环中,记为,再然后以该点为中心的图形数就是 所以我们只需找出所有三元环 据说这是一个套路题 我们将所有无向边改为有向边,由度数小的向度数大的连边,度数相同就
阅读全文
摘要:题目链接 "BZOJ4815" 题解 根据题中的式子,手玩一下发现和很像 化一下式子: $$ \begin{aligned} bf(a,a + b) &= (a + b)f(a,b) \\ \frac{f(a,a + b)}{a + b} &= \frac{f(a,b)}{b} \\ \f
阅读全文
摘要:题目链接 "BZOJ4897" 题解 发现我们付出的代价与区间长度无关,而与区间权值范围有关 离散化一下权值 我们设表示区间消到只剩权值在所需最小代价 即为消完的最小代价 那么 $$f[l][r][0][0] =
阅读全文
摘要:题目链接 "BZOJ4896" 题解 怎么那么喜欢出树的题。。。 我们当然可以按题意模拟建 询问的时候,由于存在删除操作,不满足单调性,不能直接二分答案 我们就在每个节点上用储存每个值第一次出现的时间点 每次询问找到那个点二分一下即可
阅读全文
摘要:题目链接 "BZOJ4104" 题解 我们将已知字符排序,由循环就可以得到一个对应关系 如样例就是: 0 第5行 1 第1行 1 第2行 1 第3行 1 第5行 2 第6行 3 第4行 按照这个循序加入答案即可 C++ include include include include include
阅读全文
摘要:题目链接 "BZOJ4105" 题解 平方操作orz,虽说应该是线段树,但是不会维护啊QAQ 小瞧一眼题解。。。 平方成环?环长小于? 果然还是打表找规律题。。。。 那就很好做了,先预处理每个数是否在环上,如果当前区间存在数不在环上,就暴力修改 如果当前区间都在环上了,就处理出环,
阅读全文
摘要:题目链接 "BZOJ4103" 题解 一眼看过去是二维结构,实则未然需要树套树之类的数据结构 区域异或和,就一定是可持久化树 观察数据,非常大,而和比较小,甚至可以每次询问都枚举 所以我们可以考虑对建,每次询问取出对应区间的在对
阅读全文
摘要:题目链接 "BZOJ5322" 题解 意思就是使有序的排列尽量少 就是使相同的数尽量少 然后大力贪心即可 C++ include include include include include include define REP(i,n) for (register int i = 1; i (a
阅读全文
摘要:题目链接 "BZOJ5323" 题解 有一些数是不能被别的数筛掉的 这些数出现最晚的位置就是该排列的 所以我们只需找出所有这些数,线性筛一下即可,设有个 然后枚举最后的位置 $$ans = \sum\limits_{i = m}^{n} m!(n m)!{i 1 \choose m
阅读全文
摘要:题目链接 "BZOJ4567" 题解 题意真是鬼畜= = 意思就是说我们应先将一个串的所有后缀都插入之后再插入这个串,产生代价为其到上一个后缀的距离 我们翻转一下串,转化为前缀,就可以建树来解决了 建好后单独取出单词节点,贪心先往子树小的节点编号即可 C++ include
阅读全文
摘要:题目链接 "BZOJ4569" 题解 倍增的思想很棒 题目实际上就是每次让我们合并两个区间对应位置的数,最后的答案,是联通块数,因为要去前导,首位不为即可 如何快速合并两个区间? 倍增! 每次合并两个区间,我们就利用倍增分成
阅读全文
摘要:题目链接 "BZOJ5011" 题解 一定只有我这种智障会用这么奇怪的方法做这道题。。 由题我们知道最后剩余的一定是一个区间,而且区间内的颜色不存在于区间外 所以我们的目的就是为了找到这样的区间的数量 区间由左右端点确定,我们枚举右端点,尝试维护左端点数量 当我们从右向左枚举到,右边的颜
阅读全文
摘要:题目链接 "BZOJ3242" 题解 题意很清楚,找一点使得最远点最近 如果是一棵树,就是直径中点 现在套上了一个环,我们把环单独拿出来 先求出环上每个点外向树直径更新答案,并同时求出环上每个点外向的最远距离 首先要明白以下事实: ①删掉任意一条边不会使答案更优 ②环上存在一条边,使
阅读全文
摘要:题目链接 "BZOJ4035" 题解 神题啊。。。orz 不过网上题解好难看,数学推导不写怎么看。。【~~Latex中毒晚期~~】 我们由题当然能很快写出方程 设表示从出发逃离的期望步数,为该点度数 $$ \begin{aligned} f[u] &=
阅读全文
摘要:题目链接 "BZOJ4418" 题解 题意:从一个序列上某一点开始沿一个方向走,走到头返回,每次走的步长各有概率,问走到一点的期望步数,或者无解 我们先将序列倍长形成循环序列, 按期望的套路,我们设为从点出发到达终点的期望步数【一定要
阅读全文
摘要:题目链接 "BZOJ4008" 题解 要求所有牌造成伤害的期望,就是求每一张牌发动的概率 我们发现一张牌能否发动,还与其前面的牌是否发动有关 那我们设表示前张在轮游戏中总共发动了张的概率 那么 $$g "i] = \sum\limits_{j = 0}
阅读全文
摘要:题目链接 "BZOJ1559" 题解 考虑到这是一个包含子串的问题,而且子串非常少,我们考虑自动机上的状压 设表示长度为的串,匹配到了自动机号节点,且已匹配集合为的方案数 直接在自动机上转移即可 但是为了防止使用指
阅读全文
摘要:题目链接 "BZOJ1558" 题解 等差数列,当然是差分一下 差分值相同的连续位置形成等差数列,我们所选的两个等差数列之间可以有一个位置舍弃 例如: 差分后是 左边两个形成等差,右边两个$2
阅读全文
摘要:题目链接 "BZOJ2729" 题解 高考数学题。。。 我们先把老师看做男生,女生插空站 如果两个老师相邻,我们把他们看做一个男生,女生插空站 对于个男生个女生的方案数: 还要特判一下没有男生女生的情况 然后高精即可
阅读全文
摘要:题目链接 "BZOJ1857" 题解 画画图就发现实际上是在上和上分别选两个点,,使得最小 然后猜想到当固定时,这个值的函数关于是下凸的 当总取最优时,关于也是下凸的 感觉十分的对 两
阅读全文
摘要:题目链接 "BZOJ2118" 题解 orz竟然是最短路 我们去后取出最小的,记为,然后考虑模下的 一个数能被凑出,那么也能被凑出 所以我们只需找出最小的凑出的代价 我们如果将同余下的和看作点,那么加上一个数就相当于在点间转移的边 所以我
阅读全文
摘要:题目链接 "BZOJ5340" 题解 我们能很容易维护每个人当前各种血量的概率 设表示号人血量为的概率 每次攻击的时候,讨论一下击中不击中即可转移 是的 现在考虑一下结界 如果我们设表示除了还存活个人的概率 那么 $$an
阅读全文
摘要:题目链接 "BZOJ5343" 题解 明显要二分一下美味度,然后用尽量少的价格去购买饮料,看看能否买到升,然后看看能否控制价格在内 尽量少的价格,就优先先选完便宜的饮料,由于询问的是一定美味度范围的,主席树上询问即可
阅读全文
摘要:题目链接 "BZOJ2001" 题解 CDQ分治神题。。。 难想难写。。 比较朴素的思想是对于每个询问都求一遍,这样做显然会爆 考虑一下时间都浪费在了什么地方 我们每次求实际上就只有一条边不同,我们实际浪费了很多时间在处理相同的边上 那就考虑分治 对于一个待修改的边集,我们将其权
阅读全文
摘要:题目链接 "BZOJ3573" 题解 题目又臭又长系列 题意:修改尽量少的点权,使得: ①同个节点的所有儿子点权相同 ②任意非叶节点权值等于其儿子权值之和 容易发现一旦任意一个点权值确定,整棵树权值就确定 一个比较简单的想法是枚举根节点权值 但我们可以通过计算出每个节点如若保留原值,根节点会是什么值
阅读全文
摘要:题目链接 "BZOJ2753" 题解 完了我连裸题都做不出来了。。 题目是求最小树形图,即有向图最小生成树 我们不能直接上,而要保证先加入前面的点, 所以我们排序的时候第一关键字改为高度即可 C++ include include include include
阅读全文
摘要:题目链接 "BZOJ3533" 题解 我们设询问的向量为,参与乘积的向量为 则有 $$ \begin{aligned} ans &= x_0x + y_0y \\ y &= \frac{x_0}{y_0}x + \frac{ans}{y_0} \\ \end{al
阅读全文
摘要:题目链接 "BZOJ1407" 题解 枚举用扩欧判即可 C++ include include include include include define REP(i,n) for (int i = 1; i 57){if (c == ' ') flag = 1; c = getchar()
阅读全文
摘要:题目链接 "BZOJ3243" 题解 模数只有或,可以大力讨论 如果模数为,乘积结果只有或 如果一个向量和前面所有向量乘积都为,那么其和前面向量前缀和的乘积就唯一确定 我们维护向量前缀和,第一个乘积情况不符的向量一定是答案,然后再枚举另一个向量即
阅读全文
摘要:题目链接 "BZOJ3671" 题解 模拟题意生成矩阵贪心从小选择即可 每选择一个,就标记其左下右上矩阵 由于每次都是标记一个到边界的矩阵,所以一旦遇到标记过就直接退出即可,可以保证复杂度 还有就是空间和时间有点卡 C++ include include include include includ
阅读全文
摘要:题目链接 "BZOJ4568" 题解 选任意个数异或和最大,使用线性基 线性基插入,合并 我们要求树上两点间异或和最大值,由于合并是的,我们尽量只合并一次 那就采用点分治 每次求出到分治重心的线性基,将过分治重心的询问的两个线性基合并即可
阅读全文
摘要:题目链接 "BZOJ4012" 题解 Mychael并没有A掉,而是T掉了 讲讲主要思路 在点分树上每个点开两棵, 平衡树维护子树中各年龄到根的距离 平衡树维护子树中各年龄到点分树父亲的距离 然后询问就可以在点分树上用两棵平衡树相减计算了 大常数被卡
阅读全文
摘要:题目链接 "BZOJ1095" 题解 传说中的动态点分治,一直不敢碰 今日一会,感觉其实并不艰涩难懂 考虑没有修改,如果不用树形dp的话,就得点分治 对于每个重心,我们会考虑其分治的子树内所有点到它的距离,然后取所有不同子树中最大的两个相加来更新答案 如果带修改怎么办呢? 考虑一个点被修改了,
阅读全文
摘要:题目链接 "BZOJ2299" 题解 题意就是给我们四个方向的向量,求能否凑出 显然我们就可以得到一对四元方程组,用裴蜀定理判断一下方程有没有解即可 C++ include include include include inclu
阅读全文
摘要:我们通常会需要求解形如的通项公式,其中和已知 我们不妨设是一个等比数列,公比为 $$ \begin{aligned} f_{n + 2} &= af_{n + 1} + bf_{n} \\ q^2f
阅读全文
摘要:题目链接 "洛谷P4593" 题解 "orz dalao" upd:经典的自然数幂和,伯努利数裸题 由题我们只需模拟出代价,只需使用这样的前缀和计算 我不知道怎么来的这样一个公式: $$(n + 1)^{k} n^{k}
阅读全文
摘要:题目链接 "洛谷P4591" 题解 设表示前个串匹配到位置的方案数,匹配一下第个串进行转移即可 本来写了,发现没过,又写了一个,依旧,无奈去翻题解,竟然要取模??!! 题面怎么不讲啊,, C++ include include inc
阅读全文
摘要:题目链接 "洛谷P4588" 题解 用线段树维护即可 C++ include include include include include include define Redge(u) for (int k = h[u],to; k; k = ed[k].nxt) define REP(i,n)
阅读全文
摘要:题目链接 "洛谷P4589" 题意可能不清,就是给出一个带权有向图,选出条链,问能否全部点覆盖,如果不能,问不能覆盖的点权最小值最大是多少 题解 如果要问全部覆盖,就是经典的可重点的DAG最小路径覆盖,floyd求出传递闭包后跑二分图最大匹配即可 如果不能全部覆盖,就二分答案,看看能否
阅读全文
摘要:题目链接 "BZOJ4592" 题解 可持久化trie树裸题 写完就A了 C++ include include include include include include define Redge(u) for (int k = h[u],to; k; k = ed[k].nxt) defin
阅读全文
摘要:题目链接 "洛谷P3763" 题解 后缀数组裸题 在BZOJ被卡常到哭QAQ
阅读全文
摘要:题目链接 "BZOJ1513" 题解 真正地理解了一波线段树标记永久化的姿势 每个节点维护两个值和 代表儿子中的最值 代表未下传的最值 显然节点的区间大于等于的实际区间 而的区间包含节点的区间 我们在修改的时候,沿路都要修改,底层修改
阅读全文
摘要:题目链接 "POJ2155" 题解 二维线段树水题,蒟蒻本想拿来养生一下 数据结构真的是有毒啊,, ~~TM这题卡常~~ 动态开点线段树会TLE【也不知道为什么】 直接开个二维数组反倒能过 C++ include include include include include include def
阅读全文
摘要:题目链接 "BZOJ4785" 题解 肝了一个下午QAQ没写过二维线段树还是很难受 首先题目中的树状数组实际维护的是后缀和,这一点凭分析或经验或手模观察可以得出 在意义下,我们实际求出的区间和是,和唯一不同的就在于和 所以每个询问实
阅读全文
摘要:题目链接 "uoj185" 题解 设表示为根的子树,号点对应图上号点时的方案数 显然这样会使一些节点使用同一个节点,此时总的节点数就不满个 我们枚举选的点,再进行 然后根据选的点数量进行容斥 【BZOJ卡不过QAQ】 C++ inclu
阅读全文
摘要:题目链接 "BZOJ3236" 题解 没想到这题真的是如此暴力 C++ include include include include include include define Redge(u) for (int k = h[u],to; k; k = ed[k].nxt) define REP
阅读全文
摘要:题目链接 "BZOJ3244" 题解 不会做 "orz" 我们要挖掘出序和序的性质 ①容易知道序一定是一层一层的,如果我们能确定在序中各层的断点,就能确定深度 ②由于序和序儿子遍历顺序是一样的,所以序同一层的点,在序中顺
阅读全文
摘要:题目链接 "BZOJ4826" 题解 蒟蒻智力水平捉急orz 我们会发现相邻的和贡献一定是,可以很快算出来【然而我一开始忘了考虑调了半天】 我们现在只考虑不相邻的 我们只需要找出所有产生贡献的即可 我们发现每一个产生贡献的都能对应到一个三元组
阅读全文
摘要:题目链接 "BZOJ4552" 题解 之前去雅礼培训做过一道题,维护区间排序并能在线查询 可惜我至今不能get 但这道题有着的离线算法 我们看到询问只有一个,自然可以去尝试二分 我们二分一个值,就只关心最终那个位置的值和其的大小关系 所以我们可以令所有$\
阅读全文
摘要:题目链接 "BZOJ5299" 题解 就一个毒瘤卡常题。。写了那么久 设表示选了集合中的点,最后一个是,进行转移 要先预处理出两点间的点,然后卡卡常就可以过了 C++ include include include include include include inc
阅读全文
摘要:题目链接 "BZOJ4032" 题解 首先膜 空手切神题 一问,二问枚举 三问树,四问 南二巨佬神 空手吊打自动机 咳。说正解 要处理子串,直接搬上后缀自动机 要处理子序列,直接搬上序列自动机
阅读全文
摘要:题目链接 "BZOJ4894" 题解 双倍经验 "P5297" "题解"
阅读全文
摘要:题目链接 "BZOJ5297" 题解 最近这玩意这么那么火 这题要用到有向图的矩阵树定理 主对角线上对应入度 剩余位置如果有边则为,不然为 即为以为根的有向图生成树个数 C++ include include include include include in
阅读全文
摘要:题目链接 "BZOJ5300" 题解 这题真的是很丧病,,卡高精卡到哭 我们设表示卸掉前个环需要的步数 那么 直接高精递推不仅而且 然后就要用到数学求通项公式,~~或者打表找规律~~ $$f[n]
阅读全文
摘要:题目链接 "BZOJ5301" 题解 莫队水题 BZOJ400AC纪念
阅读全文
摘要:题目链接 "BZOJ3594" 题解 dp难题总是想不出来,, 首先要观察到一个很重要的性质,就是每次拔高一定是拔一段后缀 因为如果单独只拔前段的话,后面与前面的高度差距大了,不优反劣 然后很显然可以设出表示前个玉米,第棵必须选,且共拔高了次的最大值 由之前的性质
阅读全文
摘要:题目链接 "BZOJ3597" 题解 orz一眼过去一点思路都没有 既然是流量网络,就要借鉴网络流的思想了 我们先处理一下那个比值,显然是一个分数规划,我们二分一个 如果成立,则 $$\lambda \le \frac{X Y}{k
阅读全文
摘要:题目链接 "BZOJ3230" 权限题 题解 后缀数组基础题 询问第K大不同子串和正反lcp长度 ~~如果您RE了,您就要知道询问的输入会爆LL~~ C++ include include include include include include define Redge(u) for (in
阅读全文
摘要:题目链接 "BZOJ5158" 题解 题中所给的最长上升子序列其实就是一个限制条件 我们要构造出最大的以开头的最长下降子序列,就需要编号大的点的权值尽量小 相同时当然就没有贡献,所以我们不妨令权值为一个到的排列 考虑如何满足限制条件 对于所有的点,点与点之间一定
阅读全文
摘要:题目链接 "BZOJ5154" 题解 先跑出一个匹配方案 然后暴力删去每对匹配再检验一下答案是否减小 使用KM算法提升速度 C++ include include include include include include define REP(i,n) for (int i = 1; i (a
阅读全文
摘要:题目链接 "BZOJ3609" 题解 我们假设最后合成若干个,和,此时合成次数是最多的,也唯一确定胜利者 可以发现,在轮流操作的情况下,胜利者一定可以将终态变为这个状态 所以只用判奇偶性即可 C++ include include include include inclu
阅读全文
摘要:题目链接 "BZOJ5157" 题解 我们只需计算每个位置为开头产生的贡献大小,就相当于之后每个大于当前位置的位置产生的贡献 + 1之和 离散化后用树状数组维护即可 要注意去重,后面计算的包含之前的,记录下来减去即可 C++ include include include include inclu
阅读全文
摘要:题目链接 "BZOJ4031" 题解 第一眼:这不裸的矩阵树定理么 第二眼:这个模是什么鬼嘛QAQ 想尝试递归求行列式,发现这是的。。 想上高斯消元,却又处理不了逆元这个东西、、 无奈去翻题解,,, 发现可以用类似辗转相除法去消,而避免除法,,, 这样子依旧是每次一行减去另
阅读全文
摘要:题目链接 "BZOJ4890" 题解 枚举断开哪一条边,然后对剩余的两棵树分别做一遍换根法树形dp 需要求出每个点到树中其它点距离的最大值和次大值【用以辅助换根计算最大值】 求出每棵树中的最长路径,然后再将两棵树中最小值相连保证相连后产生的最大值最小 $O(n^2
阅读全文
摘要:题目链接 "BZOJ3456" 题解 据说这题是多项式求逆 我太弱不会QAQ,只能分治 设表示个节点的简单无向连通图的数量 考虑转移,直接求不好求,我们知道个点无向图的数量是的,考虑用总数减去不连通的 既
阅读全文
摘要:题目链接 "BZOJ3622" 题解 既已开题 ~~那就已经没有什么好害怕的了~~ 由题目中奇怪的条件我们可以特判掉为奇数时答案为 否则我们要求的就是糖果大于药片恰好有个的方案数,我们记为 思路1 直接求恰好不好求,想到二项式反演: 如果有
阅读全文
摘要:题目链接 "BZOJ4001" 题解 "Miskcoo" 太神了,orz
阅读全文
摘要:题目链接 "BZOJ1025" 题解 题意就是问一个的排列在同一个置换不断重复下回到可能需要的次数的个数 和置换群也没太大关系 我们只需知道同一个置换不断重复,实际上就是每个循环节的元素不断在循环节上旋转,所需次数就是所有循环节长度的 这一点很显然 而循环节数
阅读全文
摘要:题目链接 "BZOJ1004" 题解 burnside定理 在个置换下本质不同的染色方案数,等于每种置换下不变的方案数的平均数 记为本质不同的染色方案数,为置换数,为置换下不变的方案数,那么 $$L = \frac{1}{m}\sum\limits_{i = 1}
阅读全文
摘要:题目链接 "BZOJ4888" 题解 要求所有连续异或和,转化为任意两个前缀和相减 要求最后的异或和,转化为求每一位的出现次数 所以我们只需要对每一个快速求出$sum[i] sum[j] \quad [j include include include include include d
阅读全文
摘要:题目链接 "BZOJ4824" 题解 观察出题目中的关系实际上是完全二叉树的父子关系 我们设为以为根的节点在其子树中排名为的方案数 转移时,枚举左右子树分别有几个节点比小,进行转移 乍一看是的,但其复杂度分析和某一题很像 就是在根处枚举两个子树大小
阅读全文
摘要:题目链接 "POJ3252" 题解 为什么每次写出数位dp都如此兴奋? ~~因为数位dp太苟了~~ ~~因为我太弱了~~ 设表示到二进制第位,之前是否达到上界,前面已经有个,个时的方案数 显然当$cnt1 = 0
阅读全文
摘要:题目链接 "BZOJ3238" 题解 简单题 经典后缀数组 + 单调栈套路,求所有后缀
阅读全文
摘要:题目链接 "BZOJ1233" 题解 有一个贪心策略:同样的干草集合,底长小的一定不比底长大的矮 设表示形成的干草堆的最小底长,同时用记录此时的高度 那么 $$f[i] = min\{f[j]\} \quad [sum[j 1] sum[i 1] \ge f[j
阅读全文
摘要:题目链接 "POJ2374" 题解 题意: 给出个平行于轴的栅栏,求从一侧栅栏的某个位置出发,绕过所有栅栏到达另一侧位置的最短水平距离 往上说都是线段树优化dp 我写了一个奇怪的线段树过了,似乎并没有和dp沾边 因为每次都是从某个栅栏的端点出发,到达某个位置的值等于[所有这
阅读全文
摘要:题目链接 "POJ" 题解 背包树形dp板题 就是读入有点无聊,浪费了很多青春 C++ include include include include include include include define LL long long int define REP(i,n) for (int i
阅读全文
摘要:题目链接 "POJ3585" 题解 二次扫描与换根法 对于这样一个无根树的树形dp 我们先任选一根进行一次树形dp 然后再扫一遍通过计算得出每个点为根时的答案 C++ include include include include include define LL long long int de
阅读全文
摘要:题目链接 "选课" 题解 基础背包树形dp C++ include include include include include define LL long long int define Redge(u) for (int k = h[u],to; k; k = ed[k].nxt) defi
阅读全文
摘要:题目链接 "BZOJ2535" 题解 航班之间的关系形成了一个拓扑图 而且航班若要合法,应尽量早出发 所以我们逆拓扑序选点,能在后面出发的尽量后面出发,不会使其它点变得更劣,容易知是正确的 第二问只需枚举航班,拓扑排序时忽视,最后无法选点时就是最早的时间 C++ include i
阅读全文
摘要:题目链接 "BZOJ1017" 题解 orz "hzwer" 树形dp神题 设表示号物品恰好花费金币,并将个物品贡献给父亲的合成时的最大收益 计算时,我们先枚举合成了x个号物品,计算出此时的花费各种金币下最大收益 然后就可以枚举
阅读全文
摘要:题目链接 "hdu5834" 题解 思路很粗犷,实现很难受 设表示向子树走回来或不回来的最大收益 设表示向父亲走走回来或不回来的最大收益 再设为的次优收益 对于,贪心选择所有$f[v][1] 2 w \ge
阅读全文
摘要:题目链接 "POJ2152" 题解 经典老题,还真暴力 ,所以可以做 所以可以枚举每个点依附于哪一个点 设表示以为根的子树的最小代价 表示依附于时以为根的子树的最小代价 显然 $$f[u] = min\{
阅读全文
摘要:题目链接 "POJ1848" 题解 由题,一个环至少由三个点组成,一个点作为根时,可以单独成链,可以与其一个儿子成链,或者与其两个儿子成环,与其一个剩余链长度大于等于2的儿子成环。 那么我们设最小代价 表示以为根全部成环 表示除外全部成环 $f[u][
阅读全文
摘要:题目链接 "hdu3586" 题解 二分 + 简单的树形dp 我正有练一下dp的必要了
阅读全文
摘要:题目链接 "BZOJ4557" 题解 "orz" 比较难的树形dp 不过想想也还好 看数据猜状态,一维是点,一维是D 那么就先设表示所在子树已处理完毕,还能向上【或向任意方向】覆盖层的最小代价 考虑转移,会发现子树间会相互影响,一个子树用更新了
阅读全文
摘要:题目链接 "BZOJ4000" 题解 注意题目中的编号均从开始= = 特别小,考虑状压 设为第行为的方案数 每个棋子能攻击的只有本行,上一行,下一行, 我们能迅速找出哪些状态是合法的,以及每个状态所对应的上一行攻击位置的并和下一行攻击位置的并 如果两个状态上
阅读全文
摘要:题目链接 "BZOJ1487" 题解 就是一个简单的仙人掌最大权独立集 还是不会圆方树 老老实实地树形Dp + 环处理 C++ include include include include include define LL long long int define Redge(u) for (i
阅读全文
摘要:题目链接 "洛谷P3832" 题解 字符串哈希然后丢到hash表里边查询即可 因为,1、2操作就暴力维护一下 经复杂度分析会发现直接这样暴力维护是对的 一开始自然溢出WA了,还以为是哈希冲突,改成双哈希后依旧WA 后来才发现是sb了漏了一句QAQ 不卡自然溢出 C++ inclu
阅读全文
摘要:题目链接 "BZOJ3571" 题解 如果知道最小乘积生成树,那么这种双权值乘积最小就是裸题了 将两权值和作为坐标,转化为二维坐标系下凸包上的点,然后不断划分分治就好了 这里求的是最小匹配值,每次找点套一个二分图最小权匹配 为什么用KM算法?因为这道题丧心病狂卡费用流QAQ 写完就A啦,十分的感人
阅读全文
摘要:先orz "litble——KM算法 " 为什么要用KM算法 ~~因为有的题丧心病狂卡费用流~~ KM算法相比于费用流来说,具有更高的效率。 算法流程 我们给每一个点设一个期望值【可行顶标】 对于左边的点来说,就是期望能匹配到多大权值的右边的点 对于右边的点来说,就是期望能在左边的点的期望之上还能产
阅读全文
摘要:题目链接 "BZOJ2121" 题解 dp怎么那么神呐QAQ 我们要求出最小字符串长度 我们设一个表示前个字符最后所形成的最短字符串长度 对于第个字符,要么保留,就是,要么和前面若干个字符一起被删掉 我们设表示区间
阅读全文
摘要:题目链接 "BZOJ2395" 题意:无向图中每条边有两种权值,定义一个生成树的权值为两种权值各自的和的积 求权值最小的生成树 题解 如果我们将一个生成树的权值看做坐标,那么每一个生成树就对应一个二维平面上的坐标 在同一个反比例函数图像上的点权值相同,反比例函数越小的点越贴近坐标轴 所以答案
阅读全文
摘要:题目链接 "BZOJ2396" 题解 一种快速判断两个矩阵是否相等的方法: 对于两个矩阵,两边同时乘一个的随机矩阵,如果结果相等,那么有很大概率两个矩阵相等 如果左边是的话,用矩阵的结合律先让乘就好了,这样子总是一个的矩阵乘一个的矩阵 复杂度$
阅读全文
摘要:题目链接 "loj300" 题解 orz "litble" 膜完题解后,突然有一个简单的想法: 考虑到是质数,考虑Lucas定理: $${n \choose m} = \prod_{i = 1} {\lfloor \frac{n}{2^{i 1}} \rfloor \mod 2^i \choo
阅读全文
摘要:题目 给定长度为n的序列:a1,a2,…,an,记为a[1:n]。类似地,a[l:r](1≤l≤r≤N)是指序列:al,al+1,…,ar 1,ar。若1≤l≤s≤t≤r≤n,则称a[s:t]是a[l:r]的子序列。现在有q个询问,每个询问给定两个数l和r,1≤l≤r ≤n,求a[l:r]的不同子序
阅读全文
摘要:题目 我的室友最近喜欢上了一个可爱的小女生。马上就要到她的生日了,他决定买一对情侣手 环,一个留给自己,一 个送给她。每个手环上各有 n 个装饰物,并且每个装饰物都有一定的亮度。但是在她生日的前一天,我的室友突 然发现他好像拿错了一个手环,而且已经没时间去更换它了!他只能使用一种特殊的方法,将其中一
阅读全文
摘要:题目 给定正整数n,m。求 输入格式 一行两个整数n,m。 输出格式 一个整数,为答案模1000000007后的值。 输入样例 5 4 输出样例 424 提示 数据规模: 1 include include include include define LL long long int define
阅读全文
摘要:题目 输入格式 第一行,两个正整数 S 和 q,q 表示询问数量。 接下来 q 行,每行一个正整数 n。 输出格式 输出共 q 行,分别为每个询问的答案。 输入样例 30 3 9 29 1000000000000000000 输出样例 0 9 450000036 提示 对于100%的数据,2 inc
阅读全文
摘要:题目 在2016年,佳媛姐姐刚刚学习了第二类斯特林数,非常开心。 现在他想计算这样一个函数的值: S(i, j)表示第二类斯特林数,递推公式为: S(i, j) = j ∗ S(i − 1, j) + S(i − 1, j − 1), 1 i0$ \begin{al
阅读全文
摘要:第二类斯特林数 第二类斯特林数,记为或,表示将个元素划分到个非空无序集合的方案数 计算式 计算式有两种,递推式和通项式 递推式 第个元素有两种选择,自己独立为一个集合,或者加入之前的集合 $
阅读全文