05 2018 档案
摘要:【CF700E】Cool Slogans(后缀自动机) 题面 "洛谷" "CodeForces" 题解 构建后缀自动机,求出后缀树 现在有个比较明显的dp 设f[i]表示从上而下到达当前点能够满足条件的最优值 只需要检查父亲节点是否在当前串中出现过两次就行了 这个判断用endpos来判断
阅读全文
摘要:【BZOJ5319】军训列队(主席树) 题面 "BZOJ" "洛谷" 题解 一眼题既视感。。。 首先很明显,每次询问的结果显然是做一次离散。 然后直接上主席树就好了。。。 查询答案的方式也很简单 考虑一下那个绝对值是个什么东西 如果所有的点都在目标区间以左 则直接区间和去算一下。 如果所有的点都在目
阅读全文
摘要:【BZOJ2306】幸福路径(动态规划,倍增) 题面 "BZOJ" 题解 不要求确切的值,只需要逼近 显然可以通过移动\infty步来达到逼近的效果 考虑每次的一步怎么移动 设f[i][j]表示走i步到了j能够得到的最大权值 $f[i][v]=max(f[i 1][u])+W[v]
阅读全文
摘要:【BZOJ4754】独特的树叶(哈希) 题面 "BZOJ" 给定一个n个节点的树A和一个n+1个节点的树B 求B的一个编号最小的节点,使得删去这个节点后A,B同构 题解 树哈希 一个奇怪的姿势 总而言之,就是把树的各种信息乱七八糟的拼在一起强行哈希一下 真搞不懂这种丧病的东西为什
阅读全文
摘要:【CF809E】Surprise me!(动态规划,虚树,莫比乌斯反演) 题面 "洛谷" "CodeForces" 翻译: 给定一棵n个节点的树,每个点有一个权值a[i],保证a[i]是一个1..n的排列。 求$$\frac{1}{n(n 1)}\sum_{i=1}^n\sum_{j
阅读全文
摘要:【BZOJ1941】Hide and Seek(KD Tree) 题面 "BZOJ" "洛谷" 题解 KD Tree对于每个点搜一下最近点和最远点就好了 cpp include include include include include include include include inc
阅读全文
摘要:【BZOJ5329】【SDOI2018】战略游戏(圆方树,虚树) 题面 "BZOJ" "洛谷" Description 省选临近,放飞自我的小Q无心刷题,于是怂恿小C和他一起颓废,玩起了一款战略游戏。 这款战略游戏的地图由n个城市以及m条连接这些城市的双向道路构成,并且从任意一个城市出发总能沿着道路
阅读全文
摘要:【CF613D】Kingdom and its Cities(虚树,动态规划) 题面 "洛谷" "CF" 翻译洛谷上有啦 题解 每次构建虚树,首先特判无解,也就是关键点中存在父子关系。 考虑dp,设f[i]表示解决i子树以内的最小点数 再用一个数组g[i]表示i的子树中还未阻断的
阅读全文
摘要:【CodeChef】Palindromeness(回文树) 题面 "Vjudge" "CodeChef" "中文版题面" 题解 构建回文树,现在的问题就是要求出当前回文串节点的长度的一半的那个回文串所代表的节点 定义half表示长度最长并且长度小于等于当前节点长度一半的回文串所代表的节点 $ha
阅读全文
摘要:【BZOJ1031】字符加密(后缀数组) 题面 "BZOJ" "洛谷" 题解 把字符串倍长 然后直接求后缀数组, 拍好序之后直接输出就行了。 (我只是复习一下SA而已) cpp include include include include include include include inc
阅读全文
摘要:【BZOJ4892】DNA(后缀数组) 题面 "BZOJ" "洛谷" 题解 看到这道题目,我第一反应是FFT??? 然后大力码出了一个FFT 就像这样 然后洛谷上交一发 恩。。。FFT果然常数名不虚传 那么就用NTT吧 就像这样 这样就很开心了 当然,这个时间在洛谷能够排到多少呢?
阅读全文
摘要:【BZOJ5137】Standing Out from the Herd(后缀自动机) 题面 "BZOJ" "洛谷" 题解 构建广义后缀自动机 然后对于每个节点处理一下它的集合就好了 不知道为什么,我如果按照拓扑序从下往上合并是错的 但是把parent树建出来再合并就对了。。 cpp inclu
阅读全文
摘要:【BZOJ1564】【NOI2009】二叉查找树(动态规划) 题面 "BZOJ" "洛谷" 题目描述 已知一棵特殊的二叉查找树。根据定义,该二叉查找树中每个结点的数据值都比它左儿子结点的数据值大,而比它右儿子结点的数据值小。 另一方面,这棵查找树中每个结点都有一个权值,每个结点的权值都比它的儿子结点
阅读全文
摘要:仙人掌&圆方树学习笔记 1、仙人掌 圆方树用来干啥? ——处理仙人掌的问题。 仙人掌是啥? (图片来自于BZOJ1023) ——也就是任意一条边只会出现在一个环里面。 当然,如果你的图片想看起来舒服一点,也可以把图片变成这样子 (图片来源于网络) 2、DFS树 为啥要写这个? 因为这个看起来也可
阅读全文
摘要:【CF487E】Tourists(圆方树) 题面 "UOJ" 题解 首先我们不考虑修改,再来想想这道题目。 我们既然要求的是最小值,那么,在经过一个点双的时候,走的一定是具有较小权值的那一侧。 所以说,我们可以让所有的方点表示它所在的点双的最小权值, 这样子只需要对于圆方树树链剖分之后维护链的最小值
阅读全文
摘要:【BZOJ2125】最短路(仙人掌,圆方树) 题面 "BZOJ" 求仙人掌上两点间的最短路 题解 终于要构建圆方树啦 首先构建出圆方树,因为是仙人掌,和一般图可以稍微的不一样 直接tarjan缩点,对于每一个强连通分量构建方点(只有一个点的就不要建了) 圆方边的权值定义为到dfs($Tarj
阅读全文
摘要:【BZOJ4818】序列计数(生成函数) 题面 "BZOJ" 题解 显然是求一个多项式的若干次方,并且是循环卷积 或者说他是一个dp也没有问题 发现项数很少,直接暴力乘就行了(FFT可能还慢一些) 然后容斥减掉没有质数的就行了 cpp include include include incl
阅读全文
摘要:【BZOJ1023】仙人掌图(仙人掌,动态规划) 题面 "BZOJ" 求仙人掌的直径(两点之间最短路径最大值) 题解 一开始看错题了,以为是求仙人掌中的最长路径。。。 后来发现看错题了一下就改过来了。。 首先和普通的仙人掌dp是一样的, 对于没有问题的圆圆边,直接做最长链的转移(同时更新$ans
阅读全文
摘要:【BZOJ4316】小C的独立集(仙人掌,动态规划) 题面 "BZOJ" 题解 除了普通的动态规划以外,这题还可以用仙人掌的做法来做。 这里没有必要把圆方树给建立出来 Tarjan的本质其实就是一个构建dfs树的过程 所以我们在Tarjan的过程中求解就行了 我们设f[i][0/1]
阅读全文
摘要:【BZOJ4316】小C的独立集(动态规划) 题面 "BZOJ" 题解 考虑树的独立集求法 设f[i][0/1]表示i这个点一定不选,以及i这个点无所谓的最大值 转移f[u][0]=\sum f[v][1],f[u][1]=\sum f[v][0],$f[u][1]=max(f[
阅读全文
摘要:【BZOJ3240】【NOI2013】矩阵游戏(数论) 题面 "BZOJ" 题解 搞什么矩阵十进制快速幂加卡常? 直接数学推导不好吗? 首先观察如何从每一行的第一个推到最后一个 f[i]=a·f[i 1]+b 利用数列的一系列知识 我们设f[i]+x=a(f[i 1]+x) 解出$x=\fr
阅读全文
摘要:【BZOJ1061】【NOI2008】志愿者招募 题面 "BZOJ" 题解 我们设每类志愿者分别招募了B[i]个 那么,我们可以得到一系列的方程 \sum_{S[i]\leq x\leq T[i]}B[i]\geq A[x] 一共n天,所以是n个方程 因为有不等式让我们很不爽,所
阅读全文
摘要:【BZOJ4819】新生舞会(分数规划,网络流) 题面 "BZOJ" Description 学校组织了一次新生舞会,Cathy作为经验丰富的老学姐,负责为同学们安排舞伴。有n个男生和n个女生参加舞会 买一个男生和一个女生一起跳舞,互为舞伴。Cathy收集了这些同学之间的关系,比如两个人之前认识没计
阅读全文
摘要:【BZOJ3597】方伯伯运椰子(分数规划,网络流) 题解 给定了一个满流的费用流模型 如果要修改一条边,那么就必须满足流量平衡 也就是会修改一条某两点之间的路径上的所有边 同时还有另外一条路径会进行相反的修改 现在要求最大化\frac{X Y}{K} 二分答案mid 式子变为$X Y K·
阅读全文
摘要:【BZOJ3144】切糕(网络流,最小割) 题面 "BZOJ" 题解 这样的类型很有趣 先不考虑相邻距离差不能超过D的限制 我们考虑答案,显然就是在每个位置选一个最小的高度割就行了 化成最小割的模型? 对于每个位置挂一条长链,分别表示每个高度 S和1高度相连,R高度和T相连 连向
阅读全文
摘要:【BZOJ1486】最小圈(分数规划) 题面 "BZOJ" "洛谷" 求图中边权和除以点数最小的环 题解 分数规划 二分答案之后将边权修改为边权减去二分值 检查有无负环即可
阅读全文
摘要:【BZOJ4753】最佳团体(分数规划,动态规划) 题面 "BZOJ" Description JSOI信息学代表队一共有N名候选人,这些候选人从1到N编号。方便起见,JYY的编号是0号。每个候选人都由一位 编号比他小的候选人Ri推荐。如果Ri=0则说明这个候选人是JYY自己看上的。为了保证团队的和
阅读全文
摘要:【POJ3621】【洛谷2868】Sightseeing Cows(分数规划) 题面 "Vjudge" "洛谷" 大意: 在有向图图中选出一个环,使得这个环的点权/边权最大 题解 分数规划 二分答案之后把每条边的边权换为mid·边权 出点的点权 然后检查有没有负环就行啦
阅读全文
摘要:【POJ2728】Desert King(分数规划) 题面 "vjudge" 翻译: 有n个点,每个点有一个坐标和高度 两点之间的费用是高度之差的绝对值 两点之间的距离就是欧几里得距离 求一棵生成数,使得单位距离的费用最小 题解 使得\sum cost/\sum dis最小 这是分数规划问题
阅读全文
摘要:【POJ2976】Dropping Tests(分数规划) 题面 "Vjudge" 翻译在Vjudge上有(而且很皮) 题解 简单的01分数规划 需要我们做的是最大化\frac{\sum a[i]}{\sum b[i]} 考虑二分答案 将最大化问题转换为判定问题 $\sum{a[i]}
阅读全文
摘要:【BZOJ4520】K远点对(KD Tree) 题面 "BZOJ" "洛谷" 题解 考虑暴力。 维护一个大小为K的小根堆,然后每次把两个点之间的距离插进去,然后弹出堆顶 这样子可以用KD Tree优化: 如果当前平面内可以产生的最远距离小于堆顶,则证明这个平面内的点无法产生贡献 就不需要计算
阅读全文
摘要:【BZOJ3991】寻宝游戏(动态规划) 题面 "BZOJ" 题解 很明显,从任意一个有宝藏的点开始,每次走到相邻的dfs的节点就行了。 证明? 类似把一棵树上的关键点全部标记出来 显然是要走一个大环。 这样沿着dfs序从左至右依次便利是最优的。 用一个set维护一下就行了 cpp in
阅读全文
摘要:【BZOJ4066】简单题(KD Tree) 题面 "BZOJ" 题解 如果这题不卡空间,并且不强制在线的话 显然可以用CDQ分治做 但是它又卡空间又强制在线,于是我们欢快的来用KD Tree吧。 用KD Tree维护每一个点,每次询问的时候 判断询问的矩形和当前矩形的交 如果全部覆盖直
阅读全文
摘要:yyb简单的学习KD Tree 感觉最近一直在学东西来着。 至于原因? 还是我太弱了,每次看一道题:啥?这是什么?根本没学过啊。 索性这段时间就多学点新知识吧。 说起来,我现在最近根本不会取标题名字了,就随意一点吧。 还是这样一个一个的part写起来比较舒服。 KD Tree是什么? 我们先来理
阅读全文
摘要:【BZOJ2648】SJY摆棋子(KD Tree) 题面 "BZOJ" Description 这天,SJY显得无聊。在家自己玩。在一个棋盘上,有N个黑色棋子。他每次要么放到棋盘上一个黑色棋子,要么放上一个白色棋子,如果是白色棋子,他会找出距离这个白色棋子最近的黑色棋子。此处的距离是 曼哈顿距离 即
阅读全文
摘要:【BZOJ3611】大工程(虚树,动态规划) 题面 "BZOJ" Description 国家有一个大工程,要给一个非常大的交通网络里建一些新的通道。 我们这个国家位置非常特殊,可以看成是一个单位边权的树,城市位于顶点上。 在 2 个国家 a,b 之间建一条新通道需要的代价为树上 a,b 的最短路径
阅读全文
摘要:虚树 虚树看起来很简单的样子。 事实上也的确很简单。 我们先来知道一下虚树是用来干什么的。 对于一个问题,我们知道他可以做树型dp dp的类型大致是给你k个关键点,而dp的结果与这些关键点有关系 有m组询问,需要你对于每组询问进行回答。 并且有条件\sum k与n是同阶的
阅读全文
摘要:【BZOJ2286】消耗战(虚树,动态规划) 题面 "BZOJ" Description 在一场战争中,战场由n个岛屿和n 1个桥梁组成,保证每两个岛屿间有且仅有一条路径可达。现在,我军已经侦查到敌军的总部在编号为1的岛屿,而且他们已经没有足够多的能源维系战斗,我军胜利在望。已知在其他k个岛屿上有丰
阅读全文
摘要:【CF662C】Binary Table(FWT) 题面 "洛谷" "CF" 翻译: 有一个n m的表格($n include include include include include include include include include using namespace std;
阅读全文
摘要:【BZOJ4589】Hard Nim(FWT) 题面 "BZOJ" Description Claris和NanoApe在玩石子游戏,他们有n堆石子,规则如下: 1. Claris和NanoApe两个人轮流拿石子,Claris先拿。 2. 每次只能从一堆中取若干个,可将一堆全取走,但不可不取,拿到最
阅读全文
摘要:FWT快速沃尔什变换学习笔记 1、FWT用来干啥啊 回忆一下多项式的卷积C_k=\sum_{i+j=k}A_i B_j 我们可以用FFT来做。 甚至在一些特殊情况下,我们C_k=\sum_{i j=k}A_i B_j也能做(SDOI2015 序列统计)。 但是,如果我们把操作符换一下呢?
阅读全文
摘要:【HDU5909】Tree Cutting(FWT) 题面 "vjudge" 题目大意: 给你一棵n个节点的树,每个节点都有一个小于m的权值 定义一棵子树的权值为所有节点的异或和,问权值为0..m 1的所有子树的个数 题解 考虑dp 设f[i][j]表示以i为根节点的子树中,
阅读全文
摘要:【CSU1911】Card Game(FWT) 题面 "vjudge" 题目大意: 给定两个含有n个数的数组 每次询问一个数x,回答在每个数组中各选一个数,或起来之后的结果恰好为x的方案数。 题解 FWT的模板题 FWT写起来是真的舒服 cpp include include i
阅读全文
摘要:CTSC/APIO2018滚粗记 前言 从5.5晚上的火车到5.14早上的高铁 10天的时间真的过去的很快。 眨眼间,就到了今天晚上的颁奖。 至于结果如何,反而并不是那么重要了。 这次的比赛很明显的感受就是和全国的高手同台竞技, 不难感受到自己的实力果然还是弱。 也见到了dkw和$r
阅读全文