11 2018 档案
摘要:嘟嘟嘟 这几天开始搞平衡树了,$splay$理解起来感觉还行,然而代码看了半天才勉强看懂。 我这篇博客应该不算什么入门讲解,因为我觉得我讲不明白,所以只能算自己的学习笔记吧。 这道题就是有$n$个数,定义$f_i = min{|a_i - a_j|}, 1 \leqslant j < i$,其中$f
阅读全文
摘要:嘟嘟嘟 我的做法是$cdq$分治。(因为不会$k-d \ \ tree$啊) 假设她站在点$(x_0, y_0)\(,且对于任意的埋藏点\)(x_i, y_i)$都满足$x_i \leqslant x_0, y_i \leqslant y_0$。则距离就可以化简为$(x_0 - x_i) + (y_
阅读全文
摘要:嘟嘟嘟 双倍经验 这道题只要想明白了就和$cdq$分治的板儿没什么区别了,然而如果想不明白就会像我一样磨叽了一晚上。 删数不好办,于是离线倒序改成加数。 考虑加上一个数$a_i$形成的逆序对:1.在他前面且比他大的。2.在他后面且比他小的。 因为数字是动态添加的,所以上述的数必须是在他之前添加的!
阅读全文
摘要:嘟嘟嘟 第一反应是二维树状数组,但是看数据范围就果断放弃了。 不过这题刚好符合了修改互不干扰,可离线的标准,因此$CDQ$分治应该可解。 其实这题跟陌上花开很像,只不过第一维是时间,然后第二维是$x$,最后一维$y$用树状数组排序。 接下来是重点: 题解的方法是维护二维前缀和,也就是把这个矩形拆成四
阅读全文
摘要:嘟嘟嘟 很显然我开始学$CDQ$分治了。 我刚开始学的时候看了一篇博客,上面全是一些抽象的概念,看完后真是一头雾水,最后还不得不抄了这题的代码。 但这样可不行呀…… 于是我就不打算再扣那篇博客,而是自己想,最后真的自己想明白了。 (个人感觉这道题跟$CDQ$分治关系不大) 首先想一下二维偏序:我们先
阅读全文
摘要:嘟嘟嘟 算是一道点分治入门题吧。 分治的时候,我们只用考虑过重心的路径中边权和是$3$的倍数的路径条数。对于一个节点$i$,设他到重心的路径的权值之和$mod \ \ 3$为$x$,则能和他配对的点必须满足$dis_j \ \ mod \ \ 3 = 3 - x$。 这样做法就很显然了。不过如果把所
阅读全文
摘要:嘟嘟嘟 没错,这一道最经典的点分治模板题。 题意:求树上两点间距离$\leqslant k$的点对个数。 点分治这东西我好早就听说了,然后一两个月前也学了一下,不过只是刷了个模板,没往深处学。 对于这道题,就说说大概的步骤吧。 1.找重心:一遍$dfs$即可。 2.求出每一个子树中的点到重心的距离。
阅读全文
摘要:嘟嘟嘟 这一看就是平面分治的题,所以就想办法往这上面去靠。 关键就是到$mid$点的限制距离是什么。就是对于当前区间,所有小于这个距离的点都选出来,参与更新最优解。 假设从左右区间中得到的最优解是$d$,那么这个限制距离就是$\frac{2}\(。这很显然,如果三角形的一条边比\)\frac{2}$
阅读全文
摘要:嘟嘟嘟cf 嘟嘟嘟luogu 刚开始我看成了对于一个点$i$,存在一个点$j$满足三个条件之一,而不是任意的$j$。结果自然$gg$了,第二个点就$WA$了。 也不知怎么来的思路:平面分治。 先把所有点按$x$排序,然后规定一个中间点$a_$。两边的点向中间点作投影,这样对于任意的在左半部分的点$i
阅读全文
摘要:嘟嘟嘟hdu 嘟嘟嘟vjudge 我连这么简单的分治题都不会呀……菜死了 一不小心就把算法说出来了。 对于一段区间$[L, R]$,我们要求出这个区间中所有的长度的子区间的答案。 解法很暴力:先$O(n)$找出最小值所在位置$pos$,然后在$[L, pos]$中枚举一遍最大值去更新$temp[po
阅读全文
摘要:"嘟嘟嘟" 是个狠题…… 首先,差分得到数组$d$。 这样每一次的操作相当于$d_i++$和$d_j $。然后问最少的操作次数是数组$d$全是$0$. 很显然每一次可以往一个负数上$++$,往一个正数上$ $。令$ans1$为负数和,$ans2$为正数和,则把所有的负数或正数变成$0$需要操作$mi
阅读全文
摘要:嘟嘟嘟spoj 嘟嘟嘟vjudge 嘟嘟嘟luogu 这个数据范围都能想到是折半搜索。 但具体怎么搜呢? 还得扣着方程模型来想:我们把题中的两个相等的集合分别叫做左边和右边,令序列前一半中放到左边的数为$a$,右边的数为$b$,后一半同理为$c$和$d$。则我们要找的就是满足$a + c = b +
阅读全文
摘要:嘟嘟嘟 这个数据范围显然是折半搜索。 把序列分成两半,枚举前一半的子集,存下来。然后再枚举后一半的子集,二分查找。 细节: 1.最优解可能只在一半的子集里,所以枚举的时候也要更新答案。 2.对于当前结果$tot$,二分查找$-tot$的时候要把$-tot$两边的元素都和$tot$加起来试一下,而不是
阅读全文
摘要:嘟嘟嘟 题面我是不会咕的(没有真香):有$n(n \leqslant 25)$个任务和三个人,每次任务给出每个人能得到的值,每次任务选两个人,使$n$个任务结束后三个人得到的值是一样的,且尽量大。输出每次要派哪两个人,如果不行输出$Impossible$。 暴力是$O(3 ^ {25})$,必定过不
阅读全文
摘要:嘟嘟嘟 很简单的折半搜索。 把式子变一下型,得到$a + b = d - c$。 然后枚举$a, b$,存到$map$里,再枚举$c, d$就好了。 $map$以$a,b$两数之和为下标。为了判重,$map$的第二个参数是一个$vector$,$vector$里面又存了两个数$a, b$。 这样先$
阅读全文
摘要:嘟嘟嘟 还是$IDA*$。 这道题是$ZOJ$的加强版,$n$从$100$扩大到了$10000$,所以必须有非常给力的剪枝才能过。 除了迭代加深,还要加上估价函数:对于当前数$x$,$h(x)$应该是$O(\log_{2})$,即每一次否给$x$乘$2$。 然后如果这么手动取乘$2$的话,注意得开$
阅读全文
摘要:嘟嘟嘟 \(IDA*\)。 没错就是暴搜,然后加上迭代步数,再加上$A*$。 至于每一步的操作,也是暴力(我写的可能有点丑)。 还有一个剪枝,就是别走上一步的逆操作。 然后我因为输出$No \ \ moves \ \ needed$后没输出中间的数$Debug$了半天。 $ZZ$啊 #include
阅读全文
摘要:嘟嘟嘟 虽然我已经会网络流了,但是还是学了一个匈牙利算法。 ——就跟我会线段树,但还是学了树状数组一样。 其实匈牙利算法挺暴力的。简单来说就是先贪心匹配,然后如果左部点$i$匹配不上了,就尝试更改前面已经匹配好的点,腾出地给他匹配。 因此对于每一个点跑一遍匈牙利算法,如果这个点匹配成功,总匹配数就加
阅读全文
摘要:嘟嘟嘟 哈希 刚开始我一直在想二维哈希,但发现如果还是按行列枚举的话会破坏子矩阵的性质。也就是说,这个哈希只能维护一维的子区间的哈希值。 所以我就开了个二维数组$has_{i, j}$表示原矩阵$s_{i, j - q + 1}$到$s_{i, j}$的哈希值,所以这个要用滚动哈希。 滚动哈希就是这
阅读全文
摘要:嘟嘟嘟 题目大意:给一个费用流的残量网络,判断是不是最优解。如果不是,输出比当前解更优的任意一种方案。 刚开始以为是水题:建完图后跑费用流,并记录选取方案,最后输出。 然而这样会$TLE$! 所以我还是看了题解。 原来用了费用流的一条性质:当前流是最小费用流 $<=>$残量网络中没有负圈。 所以做法
阅读全文
摘要:嘟嘟嘟 费用流经典题。 大体的建图大家应该都会,就是每一个点向他的下面和右面点连边。但是没有解决把点权转化为边权的问题。 但是这么建图的话不能确定这个点的权应该给那一条边,因此有一个很经典同时也非常使实用的方法:拆点!这样的话点权就是$v → v'$的边权了。 对于题中的要求,简单来说就是只有第一次
阅读全文
摘要:嘟嘟嘟 费用流水题。 从源点向每一个人连一条容量为1,费用为0的边;从每一个人向每一栋房子连一条容量为1,费用为两点欧几里得距离的边;从每一栋房子向汇点连一条容量为1,费用为0的边。 跑最小费用最大流即可。 祭写$spfa$时又忘了弹栈后把标记数组清空。 #include<cstdio> #incl
阅读全文
摘要:嘟嘟嘟 题目大意:一个有向图,每一条边有一个边权,求从节点$0$到$n - 1$的两条不经过同一条边的路径,并且边权和最小。 费用流板子题。 发个博客证明一下我写了这题。 #include<cstdio> #include<iostream> #include<cmath> #include<alg
阅读全文
摘要:嘟嘟嘟 刚做费用流,思路完全不对呀…… 应该这么想(应该说敢这么想):这道题的关键在于怎么体现这个玩具是第几个加工的,只有这才能求出他的加工时间(因为加工时间包括等待时间)。 但等待时间不好求,因此要换个思路想:加工这个玩具会对别的玩具的加工时间造成多少影响。 假设三个玩具$i, j, k$依次在同
阅读全文
摘要:嘟嘟嘟 费用流入门题。 其实我也不知道为啥是费用流,不过因为学费用流的时候推这题了我才能想到。 因为每一条路只能走一次,所以容量设为1,路径长度作为费用。 然后从源点向1号节点连一条容量为2,费用为0的边;从$n$号节点向汇点连一条容量为2,费用为0的边。 跑最小费用流即可。 #include<cs
阅读全文
摘要:嘟嘟嘟 没错,我开始学费用流了! 做法也是比较朴素的$spfa$。 就是每一次以费用为权值跑一遍$spfa$找到一条最短路,然后把这条道全流满,并把这一次的流量和费用累加到答案上。因此我们需要记录路径。 就这样一直跑直到没有增广路为止,然后好像就没了。(不难啊……) 因为每一只找一条道,所以其实挺慢
阅读全文
摘要:嘟嘟嘟 洛谷题面 看到比值,就能想到01分数规划。 令$x = \frac{\sum}{\sum}\(,变一下:\)\sum{m_i - n_i * x} = 0$。但是建图我就是看题解的了。 我们把每一条边也看成一个点,从源点想这个点连一条边权为$1$的边,然后对于这条边连接着的节点$u, v$,
阅读全文
摘要:嘟嘟嘟 昨天我看到的这道题,今天终于A了。 写这道题的时间其实并不长,主要是我为这题现学了一个半平面相交(虽然是$O(n ^ 2)$的……) 思路说难也不难,关键是第一步的转化得想到。 首先可以肯定的是两圆要离得尽量远。 把每一条边向内移动$r$的距离,得到一个新的比原来小的凸包,那么这个凸包表示的
阅读全文
摘要:嘟嘟嘟 也是一道半平面相交板子题。 比较好的处理方法是先把原图形全部加入答案,然后在一条边一条边切。 然而第一个点全网(当然包括我)都没过,我最后也只能固输了…… #include<cstdio> #include<iostream> #include<cmath> #include<algorit
阅读全文
摘要:嘟嘟嘟 本来我要写feng shui这道题的。然后网上都说什么半平面相交,于是我还得现学这个东西,就来刷这道模板题了。 所谓的半平面相交和高中数学的分数规划特别像。比如这道题,把每一条边看成一条有向直线,则合法的范围都是直线的右半部分,最后求交集。大概是每一次都取一半,所以就叫半平面相交吧。 $O(
阅读全文
摘要:嘟嘟嘟 题意:给一堆点,求其中三个点构成的三角形的最大面积。 刚开始不知咋的忘了三角形三条边可能都不在凸包上,然后快速的打了个旋转卡壳结果$WA$了。还是自己太年轻了…… 正解也是旋转卡壳。对于三角形三个点$i, j, k$,$k, j, i$挨个旋转就行啦。 #include<cstdio> #i
阅读全文
摘要:嘟嘟嘟 这道题我从昨天晚上5点做到今天下午3点半……差点就疯了。 真是一道计算几何好题呀!? 刚开始我以为矩形与坐标轴平行,感觉省选题竟然这么水。但是看完样例后发现我错了…… 首先都知道要求凸包。写代码的时候一定要非常谨慎。对于重合或共线的点都要从栈中弹去,否则在后面的求矩形面积的时候会除以$0$,
阅读全文
摘要:嘟嘟嘟 一开始就觉得这道题很恶心,但还是硬这头皮做了。 因为$n \leqslant 1000$,所以可以有$O(n ^ 2)$的做法。刚开始我想统计每一个圆盘能覆盖其他圆盘的长度,最后减去。但是这样会有重复统计。后来反过来想,每一个圆盘被覆盖的面积是多少。虽然一个个算也会重复统计,但是如果把每一次
阅读全文
摘要:嘟嘟嘟 一句话题意:给定一个凸包,判断这个凸包是否是稳定凸包。 稳定凸包就是新加一个点,如果新的凸包和原来一样,就是稳定凸包;否则就不是。 判断很简单,如果凸包上的一条边只有两个端点的话,就不是稳定凸包了。 刚开始我想跑出点数最多的凸包(就是共线的点都算上),然后$O(n)$判断。然而经过极轴排序发
阅读全文
摘要:嘟嘟嘟 旋转卡壳模板题。 首先求出凸包。 然后$O(n ^ 2)$的算法很好想,但那就不叫旋转卡壳了。 考虑优化:直观的想是在枚举点的时候,对于第二层循环用二分或者三分优化,但实际上两点距离是不满足单调性的,见下图: 对于$A$点,\(AB < AC < AD > AE < AF\)。 那怎么办呢?
阅读全文
摘要:嘟嘟嘟 没错,我开始学凸包了。 其实挺简单的。 前置技能: 1.极坐标系 2.向量叉积 1.极坐标系 就是一种二维坐标系。只不过两个坐标分别表示向量和极轴的角度和自身的长度。对于不同的问题,极轴可以自己选取。 2.向量叉积 不说了 算法是$Graham$扫描法,下面讲一下实现步骤: 1.在所有点中找
阅读全文
摘要:嘟嘟嘟 题意:给出一堆正方形的边长,且这些正方形都是$45 ^ {\circ}$斜放着并且紧挨着的,求从上往下看能看到几个正方形。 真是一道好题……跟计算几何关系不大。 想一下,如果我们能求出正方形的所有端点,那么这道题就变成了从上往下看,能看到几条线段了。 对于一个正方形$s_i$的左端点$s_i
阅读全文
摘要:嘟嘟嘟 题意简述:给出一个光源$(x_0, y_0)$,和一些圆,求投影区间。 这道题其实就是求经过$(x_0, y_0)$)的圆的切线。 刚开始我想到了一个用向量旋转的方法,但是写起来特别麻烦,于是在网上找到了一个特别巨的大佬的题解,主程序代码不过$30$行,这里分享给大家。 这是原文地址 #in
阅读全文
摘要:嘟嘟嘟 题意:用一条水平线段表示以栋房子:\((x_0, y_0)(x_0', y_0)\)。然后有一条低于房子的水平线段$l_0$,代表你可以到的位置。接下来输入一个数$n$,一下$n$行每行$3$个数,用一条水平线段代表障碍物。求你在$l_0$上能看到房子的最大连续长度。(看到房子指房子完全没被
阅读全文
摘要:嘟嘟嘟 大致题意:按顺序给出$n$个拐点表示一个管道,注意这些点是管道的上端点,下端点是对应的$(x_i, y_i - 1)$。从管道口射进一束光,问能达到最远的位置的横坐标。若穿过管道,输出$Through$ \(all\) \(the\) $ pipe.$ 还是线段求交问题。 枚举端点作为直线(
阅读全文
摘要:嘟嘟嘟 题意看题中的图就行:问你从给定的点出发最少需要穿过几条线段才能从正方形中出去(边界也算)。 因为$n$很小,可以考虑比较暴力的做法。枚举在边界中的哪一个点离开的。也就是枚举四周的点$(x, y)\(,并和起点\)(x_0, y_0)$连成线段,求和多少条线段相交。 但是因为点可以是实数,所以
阅读全文
摘要:嘟嘟嘟 题面就不说了,网上都有。 刚开始理解成了只要有不孤立的线段就算合法,结果就不会了……然而题中要求是所有线段至少有一个交点。 其实想一想就知道,问题转化为了是否存在一条直线和所有线段都有交点。 所以枚举线段的端点构成直线,然后判断直线和线段是否有交点。 具体做法就是对于直线$AB$,判断线段$
阅读全文
摘要:嘟嘟嘟 题面:先告诉你一个矩形抽屉的坐标,然后$n$个隔板将抽屉分成了$n + 1$格(格子从$0$到$n - 1$标号),接下来随机输入$m$个玩具的坐标。问最后每一个格子里有多少个玩具。 仔细想想就是一道计算几何入门题。 对于一个玩具$(x_0, y_0)$,我们只要找到在他的左面且离他最近的隔
阅读全文
摘要:嘟嘟嘟 题面:给一个$n$个点的多边形和$m$个点,判断每一个点是否在多边形内。 解法:射线法。 就是从这个点引一条射线,如果与多边形有奇数个交点,则在多边形内部。 那么只用枚举每一条边,然后判断这条边与射线有无交点。为了方便,射线为水平的。然后可以用叉积判断三点共线,以及多边形的两个端点纵坐标的大
阅读全文
摘要:嘟嘟嘟 题意:按逆时针或顺时针给出一个多边形,求面积。 解法:直接套用公式:\(S = \frac{1}{2}|\sum _ {i = 1} ^ {n} {v_i \times v_{i + 1}}|\) 别忘了POJ实数输出的时候必须%\(f\),不能%\(lf\)…… #include<cstd
阅读全文
摘要:嘟嘟嘟 翻译:直线求交。 本人第一道计算几何题。已经体会到了计算几何的恶心之处…… 首先当然有联立解析式的做法,然而在咱竞赛中一般都用向量的求法。 然后刚开始我就因为怎么存向量和直线的事情折腾了好半天:刚开始开了一个向量类和一个直线类,但是发现这样封装过度了,就把直线类删了。但是单纯的开一个向量类又
阅读全文
摘要:"嘟嘟嘟" 这道题就是求一个奇素数$p$的原根数量。 公式是$\varphi(\varphi(p))$。又因为$p$是质数,所以就是$\varphi(p 1)$。 (证明啥的我不会……)
阅读全文
摘要:"嘟嘟嘟" 黄题 + 绿题 + 蓝题 = 紫题…… 对于询问1,直接快速幂。 对于询问2,$exgcd$。 对于询问3,$bsgs$,但要特判一下$a \ \ mod \ \ c = 0$且 $b \ \ mod \ \ c \neq 0$的时候应该无解。 $bsgs$不懂的可以看我的 "这篇博客"
阅读全文
摘要:这几天沉迷在数论的海洋中(快淹死了)无法自拔…… 首先高次不定方程分为$A ^ x \equiv B(mod \ \ C)$和$x ^ A \equiv B(mod \ \ C)$两种形式,对应的解法也不一样。今天先学了第一个。 $A ^ x \equiv B(mod \ \ C)$ 首先得知道这么
阅读全文
摘要:"嘟嘟嘟" 一道题又写了近两个点…… 这道题直接暴力快速幂肯定会爆(别想高精),所以还是要用一点数学知识的~ 有一个东西叫欧拉降幂公式,就是: $x ^ y \equiv x ^ {y \ \ mod \ \ \varphi(p) + \varphi
阅读全文
摘要:如题,解法主要是合并法和中国剩余定理。 而且据我所知,合并法好像就是扩展中国剩余定理…… 一元线性同余方程组就是一堆形如 $x \equiv a_1(mod \ \ m_1)$的同余方程,然后一般让你求出一个最小正整数解。 算法1 合并法 也就是我们将方程两两合并,然后求出合并后的解,从而推出最终解
阅读全文
摘要:最近又开始搞数论了……今天是欧拉函数,对于一些性质或定理,我可能会证明啥的 首先欧拉函数$\varphi(n)$指不超过$n$与$n$互素的数的个数。比如$\varphi(8) = 4$ 性质:对于$n = ^ * ^ * ^ \ldots ^ \(,有\)\varphi(n) = \varphi(
阅读全文
摘要:嘟嘟嘟 看到这个数据范围。就很容易想到网络流。 首先对于正常的桥,这条边的容量相当于$INF$,对于危桥,容量为$2$。然后按这个方式建无向图就行。 对于在$a1$和$a2$之间往返$an$次,相当于$a1$向$a2$流了至少$2 * an$的流量。那么就从源点向$a1$连一条容量为$2 * an$
阅读全文
摘要:如题,在某谷上交了一篇题解之后,顿时觉得$markdown$非常好看。
阅读全文
摘要:"嘟嘟嘟" 前缀和+倍增+树上差分 假设$v$是$u$子树中的一个点,那么$u$能控制$v$的条件是受$v$的权值的限制,而并非$u$。因此我们就能想到计算每一个点的贡献,即$v$有多少个祖先能控制它。这样就能想到暴力的做法:枚举每一个点$i$,向上爬直到两点间距离大于$a_i$为止。然后树上差分(
阅读全文
摘要:嘟嘟嘟 这道题被评为紫题完全是在假(虽然我也跟风评了紫题),顶多黄题难度。 评黄题的主要原因是得知道约瑟夫递推公式,即fn = (fn - 1 +m) % n。表示n个人报数最后的获胜者,需要注意的是编号从0~n - 1,答案加1即可。 那么这道题就是枚举m,然后O(n)代入公式验证,总复杂度O(T
阅读全文
摘要:嘟嘟嘟 这题读完思路应该马上就有了。 先强连通分量缩点,然后在DAG上dp求最长路即可,并且只在有酒吧的点更新答案。 但是这样不一定正确。原因就是拓扑排序是每一次把入度为0的点加入队列,但对于每一个点的入度,我们重新建图的时候也算上了和起点不连通的点的贡献,导致入度变大,进而导致有些点无法dp到,使
阅读全文
摘要:嘟嘟嘟 没错,就是一个板子。 够早的矩阵很简单: 1 0 1 1 0 0 0 1 0 然后我们把这个矩阵快速幂乘n - 3次后,a[0][0] + a[0][1] + a[0][2]就是答案。 然而我刚开始一直把a[0][0] + a[0][2]当成答案,所以一直不对。因为递推式是这么给的,我就觉得
阅读全文
摘要:嘟嘟嘟 这真是一道好题啊…… 看起来觉得似曾相识,但就是想不出来区间怎么合并,最后还是听lbg巨佬讲的…… <高能算法> 连线段树都不用,树状数组就行了。 对于修改区间[L, R],分别用树状数组cl, cr维护L和R的前缀和。统计的时候就是cl(R) - cr(L - 1)!理解起来就是先找出所有
阅读全文
摘要:嘟嘟嘟 树剖板子题。 维护区间最大值。 1 #include<cstdio> 2 #include<iostream> 3 #include<cmath> 4 #include<algorithm> 5 #include<cstring> 6 #include<cstdlib> 7 #include
阅读全文
摘要:嘟嘟嘟 一道线段树好题啊。 看到这道题后大概猜到是线段树,但是实在想不出来区间合并怎么写。最后还是学姐给我讲的。 首先都知道要把高度转化成斜率,然后明确的一点就是如果该点斜率比上一次选的大,就一定要选,否则一定不选。也就是说每一个区间都是一个单调上升的子序列(但是和平常理解的LIS不同)。 我们将斜
阅读全文
摘要:嘟嘟嘟 我dp真是太弱了,这么简单dp都不会。 令dp[i]表示前 i 头牛头被遮住了的最低成本。则dp[i] = min{dp[i], dp[j - 1] + c[a[i] - a[j] + 1]} (1 <= j <= i) 然后别忘了预处理后缀最小值。 1 #include<cstdio> 2
阅读全文
摘要:嘟嘟嘟 这道题只要树形dp做的熟练的话就能秒(显然我不能)。 令dp[u][0 / 1]表示u所在的子树和u相连的联通块没有/有敌人的最少代价。而且按题中所述,这个联通块只能有1个敌人。 分情况: 若敌人在节点u: 则dp[u][0] = INF,dp[u][1] = Σmin{dp[v][0],
阅读全文
摘要:嘟嘟嘟 如果把毛毛虫的毛都剃下去,那么就是求树的直径。现在加上毛,也可以仿照树的直径树形dp的做法。 在dfs的时候开两个变量,分别维护以u为端点的最长链Max1和次长链Max2,然后像求树的直径那样更新即可。 单开一个dp[u]表示在u是的最长链,这个最长链是包含u及其毛的,而上面的不包括,这样方
阅读全文
摘要:嘟嘟嘟 虽然题面很长,但是静下心来看完后,还是掩盖不了这是一道水体的事实。 发现这是一棵完全二叉树,而且深度只有40。 那么dp[u][l][r]表示到达节点u,有 l 条公路,r条铁路没修。转移方程就是分两种情况递归下去就行啦。 然后中间节点只是用来记录答案的,在叶节点计算。 据说这道题卡空间,但
阅读全文
摘要:嘟嘟嘟 这道题可以说是[HNOI2003]消防局的设立的升级版。距离从2改为了d。 辛亏d只有20,这也就是一个切入点。 令f[u][j]表示u四周 j - 1的距离需要被覆盖,g[u][j]表示u可以像四周覆盖 j 的距离。 考虑转移方程,令v为u的其中一个儿子: 1.f[u][j]:直接从v延伸
阅读全文
摘要:嘟嘟嘟 树形dp水题啦。 刚开始以为和[SDOI2006]保安站岗这道题一样,然后交上去WA了。 仔细想想还是有区别的,一个是能看到相邻点,一个是能看到相邻边。对于第一个,可以(u, v)两个点都不放,然而对于这道题就不行了。 不过dp方程更简单:dp[u][0/1]表示u这个点不放/放士兵的最优答
阅读全文
摘要:嘟嘟嘟 n个点n条边,说明图中存在一个简单环,更准确的说是每一个连通块中存在一个简单环(因为图可能不连通)。 然后有人给这个玩意起了个名字:基环外向树。 然而并没有什么用。 思路很简单:断环为链,就变成了一棵树了。为了防止断开的两端(x, y)同时被选,从x和y分别树形dp一下,然后硬性规定根节点不
阅读全文
摘要:嘟嘟嘟 01分数规划+树形背包。 然后就没了。 结果我调了半天,原因还是树形背包不熟练。 我是用dfs序求的,转化的时候,是dp[i][j]转化到dp[i + 1][j + 1]或dp[i +siz[pos[i]]][j],而不是像普通的dp从别的状态转化到dp[i][j],所以最后的答案应该考虑到
阅读全文
摘要:嘟嘟嘟 一看就是树形dp。 刚开始我的状态dp[i][0 / 1]表示以 i 为根的子树,i 选 / 不选时的最小的经费。然后转移方程我就推不出来了,因为无法很好的表示 i 和子树的关系。比如如果 i 不选,那么 i 的子节点可以选一个也可以选多个也可以一个不选,因为 i 的儿子的儿子选了的话,i
阅读全文
摘要:嘟嘟嘟 只要将每一种字母放一块输出就行了。 证明1:比如 1 2 3 4 5 6,那么这个序列对答案的贡献分别是1和5,2和4 ,3和6……如果重新排列成x x x x o o,会发现对 x x o x x o 答案的贡献不变,所以得证。 证明2:字母ai有xi个,那么对答案的最大贡献为xi * (
阅读全文
摘要:通向自由的钥匙被放n个房间里,这n个房间由n-1条走廊连接。但是每个房间里都有特别的保护魔法,在它的作用下,我无法通过这个房间,也无法取得其中的钥匙。虽然我可以通过消耗能量来破坏房间里的魔法,但是我的能量是有限的。那么,如果我最先站在1号房间(1号房间的保护魔法依然是有效的,也就是,如果不耗费能量,
阅读全文
摘要:我虽然做了好几道树形背包的题,但是一直不是十分理解,对于每一道题,总是看题解就明白,然后换一道题自己写不出来。临近NOIP,gg让我们强化一下背包以及树形背包,我也恰有此打算,于是又开始从头学习了树形背包。 看了好多博客以及论文之后,对树形背包确实有了一个全新的认识,尤其是这篇博客以及徐持恒的论文《
阅读全文

浙公网安备 33010602011771号