Evanyou Blog 彩带

10 2018 档案

摘要:"传送门啦" 再一次见证了分块的神奇用法,在数论里用分块思想。 我们要求 $ ans = \sum\limits ^{n} _{i=1} (k \% i) $ ,如果我没看错,这个题的暴力有 $ 60 $ 分,当然,不甘平凡的我们怎么能为 $ 60 $ 分折腰,我们来看正解打法。 我们要知道 $ a 阅读全文
posted @ 2018-10-31 21:09 Stephen_F 阅读(188) 评论(0) 推荐(0)
摘要:"传送门啦" 想让最大值最小,所以,这题可以用二分法,排序之后发现可以并查集,因为要使最大值最小,排序后这个最大值是存在的。 对于会冲突的两个罪犯,我们连一条无向边,然后按权值从大到小排序,从大到小枚举每一条边,如果边上的两个罪犯已经在一个监狱,那么输出结果。 冤家路窄没办法咯 否则将两个罪犯放到不 阅读全文
posted @ 2018-10-31 17:55 Stephen_F 阅读(225) 评论(0) 推荐(0)
摘要:"传送门啦" 15分暴力,但看题解说暴力分有30分。 就是找到公式,然后套公式。。 cpp include include include include using namespace std; long long read(){ char ch; bool f = false; while((c 阅读全文
posted @ 2018-10-31 17:54 Stephen_F 阅读(132) 评论(0) 推荐(0)
摘要:"传送门啦" 这个题可以说是tarjan强连通分量的裸题,但需要维护每个强连通分量的最小值,所以做法就很明确了。 我们先明确几个数组的意思: 1.首先是tarjan缩点中的几个数组: dfn[i]:i点的时间戳 low[i],表示这个点以及其子孙节点连的所有点中dfn最小的值 stack[],表示当 阅读全文
posted @ 2018-10-31 17:52 Stephen_F 阅读(155) 评论(0) 推荐(0)
摘要:"传送门啦" 这是一个tarjan强连通分量与出度结合的例题。 先明确一下题意,如果这个点(缩点之后的)没有出度,这个点才能成为明星牛(明星牛的定义是:所有牛都喜欢他才可以)。 由于我们进行了缩点,所以我就另外开一个数组num[i]:表示这个强连通分量中有多少个点。 以上就是怎样处理最后的答案: 如 阅读全文
posted @ 2018-10-31 17:51 Stephen_F 阅读(282) 评论(0) 推荐(1)
摘要:"传送门啦" 这个题就是tarjan强连通分量与入度的例题了。 思路: 利用缩点的思想,先预处理一下所有的强连通分量,然后把每个强连通分量内的所有节点看做一个节点,然后处理一张新图,然后检查每个点的入度,然后取入度为 0 的点(缩点后)的个数,即为信息出发点。 可能有人想问为什么?? 大体说明一下: 阅读全文
posted @ 2018-10-31 17:50 Stephen_F 阅读(168) 评论(0) 推荐(0)
摘要:"传送门啦" 其实这个题只要读懂分析好题意就不是很难。 就是将一个有向图进行缩点操作,把一个强连通分量看成一个点,求入度为 0 的点和出度为 0 的点各有多少。 在这里先向大家推荐两个题目,建议大家先去看看那两个题: 1. "p2002消息扩散" 这是强连通分量与入度关系的例题 2. "p2341受 阅读全文
posted @ 2018-10-31 17:49 Stephen_F 阅读(177) 评论(0) 推荐(0)
摘要:"传送门啦" 这是强连通分量与背包的例题 需要注意的就是价值和价格两个数组不要打反了。。 另外 这是 双向图!!! 阅读全文
posted @ 2018-10-31 17:47 Stephen_F 阅读(126) 评论(0) 推荐(0)
摘要:"传送门啦" 非常神奇的分块大法。 每块分 √N 个元素 , 预处理出来:对于每个点,记录两个量:一个是它要弹几次才能出它所在的这个块,另外一个是它弹出这个块后到哪个点。 查询操作:一块一块跳过去 单次复杂度 O(√N) 修改操作:只需要把相应的块改一遍就好了 这个也是O(√N) include i 阅读全文
posted @ 2018-10-31 16:07 Stephen_F 阅读(158) 评论(0) 推荐(0)
摘要:"传送门啦" 一个人要想知道自己的生日,就意味着信息的传递是成环的,因为每轮信息只能传递一个人,传递的轮数就等于环的大小 环的大小就等于环中的两个点到第三个点的距离之和加一,我们就可以在使用并查集时,维护每个点到某个确定点的距离 不妨令这个确定点为当前点的祖先,在同一个集合中,所有的点拥有共同的祖先 阅读全文
posted @ 2018-10-31 15:11 Stephen_F 阅读(119) 评论(0) 推荐(0)
摘要:"传送门啦" 下面来看任务B。我们发现,图中只要存在入度为0的点和出度为0的点就永远不可能满足要求:“ 不论我们给哪个学校发送新软件,它都会到达其余所有的学校 ”。我们还发现,只要在入度为0的点和出度为0 的点之间连一条边,就可以同时消灭两个“不合法”的点。如果不能做到刚好两两配对(不妨假设入度为0 阅读全文
posted @ 2018-10-31 15:09 Stephen_F 阅读(238) 评论(0) 推荐(0)
摘要:树状数组类似于线段树的变形。。 c[i]表示其子树的所有叶子节点的A[]之和 c[4]=A[1]+A[2]+A[3]+A[4] c[6]=A[5]+A[6] 不难看出:c[i]代表的一定是一个连续的区间 对于lowbit[]数组:就是求得最后一个1 在倒数第几位,然后将其得出的结果加上x自身就可以得 阅读全文
posted @ 2018-10-31 15:08 Stephen_F 阅读(325) 评论(0) 推荐(0)
摘要:一、基础知识 1、矩阵的定义 ! 2、行矩阵和列矩阵应该比较好理解,就是一个矩阵的每一行都可以称之为一个行矩阵,同理列矩阵也一样。 3、同型矩阵:设有矩阵A和矩阵B,矩阵A的行数和列数都与矩阵B的相同,则矩阵A、B是同型矩阵 像图中这样就是两个同型矩阵 4、单位矩阵 在矩阵的乘法中,有一种矩阵起着特 阅读全文
posted @ 2018-10-31 15:07 Stephen_F 阅读(199) 评论(0) 推荐(0)
摘要:"传送门啦" 非常神奇的分块大法。 这个题一看数据范围,觉得不小,但是如果我们以 $ \sqrt(x) $ 为界限,数据范围就降到了 $ x include include include include using namespace std; const int maxn = 150005; i 阅读全文
posted @ 2018-10-31 15:05 Stephen_F 阅读(133) 评论(0) 推荐(0)
摘要:"传送门啦" 战略游戏这个题和保安站岗很像,这个题更简单,这个题求的是士兵人数,而保安站岗需要求最优价值。 定义状态$ f[u][0/1] $ 表示 $ u $ 这个节点不放/放士兵 根据题意,如果当前节点不放置士兵,那么它的子节点必须全部放置士兵,因为要满足士兵可以看到所有的边,所以 $ f[u] 阅读全文
posted @ 2018-10-31 14:21 Stephen_F 阅读(167) 评论(0) 推荐(0)
摘要:"传送门啦" 这个题没有想象中复杂。 我们先有向边建立,因为我们无法改变有向边的方向。 建立完之后跑一边拓扑排序,我们按拓扑序小的指向大的就好了。 解释: 我们知道如果一个点在另一个点顺序的后面的话,如果我们添加这个点回去的边显然是不合理的,所以我们每读入一条无向边的时候我们判断这个点在拓扑排序里面 阅读全文
posted @ 2018-10-31 11:07 Stephen_F 阅读(192) 评论(0) 推荐(0)
摘要:"传送门啦" 这个树形dp就没那么简单了,运用了一下贪心的思想 不同的排序方法对应着不同的转移方程,如果我们用 $ f[x] = max(f[x] , b[i] +cnt i + 1) $ 来进行转移就要从小往大排,才能使f[x]小,如果用 $ f[x] = max(f[x] , b[i] + i 阅读全文
posted @ 2018-10-31 09:49 Stephen_F 阅读(163) 评论(0) 推荐(0)
摘要:这个题。。 刚开始没看见输入若干行,所以有的点就。。 令 m = n (n 1) / 2 已知 s = {s (1), s(2), ..., s(m)}, s(i) include include include using namespace std; const int maxn = 310; 阅读全文
posted @ 2018-10-31 08:29 Stephen_F 阅读(305) 评论(0) 推荐(0)
摘要:"传送门啦" 树形 $ dp $ 入门题,学树形 $ dp $ 的话,可以考虑先做这个题。 $ f[i][j] $ 表示在 $ i $ 这棵子树中选 $ j $ 个苹果的最大价值。 include include include include using namespace std; const 阅读全文
posted @ 2018-10-30 21:25 Stephen_F 阅读(134) 评论(0) 推荐(0)
摘要:"传送门啦" 一个树上dp(树上背包问题),我用了两个方法,都A掉了,这个题数据可能太水了,第一次打错了都A了,不过错误已经改掉了。 第一次就是用的树上背包,差不多是裸题了吧。 $ f[i][j] $ 表示以 $ i $ 为根的子树中选 $ j $ 个的最优方案,因为我们建立了一个虚点,所以最后用了 阅读全文
posted @ 2018-10-30 20:09 Stephen_F 阅读(155) 评论(0) 推荐(0)
摘要:"传送门啦" 这个题就快好多,这次打的代码相比较旅行商的背包,我用了预处理,先处理成01背包,然后直接dp。 没有在dp中进行,可能会快一点吧。 include include include include using namespace std; const int maxn = 1e4 4 + 阅读全文
posted @ 2018-10-30 16:37 Stephen_F 阅读(186) 评论(0) 推荐(0)
摘要:"传送门啦" 这个题不用二进制优化的话根本不行,现学的二进制优化,调了一段时间终于A了,不容易。。 如果不懂二进制优化的话可以去看我那个博客 "二进制优化多重背包" 入口 不想TLE,不要打memset,一定要用快读,听别人说不用快读卡三个点,幸亏我习惯打快读。 include include in 阅读全文
posted @ 2018-10-30 15:57 Stephen_F 阅读(305) 评论(0) 推荐(0)
摘要:此题之前先分析两种常见的背包问题,01背包与完全背包 01背包:在M件物品中取出若干件物品放到背包中,每件物品对应的体积v1,v2,v3,....对应的价值为w1,w2,w3,,,,,每件物品之多拿一件。 解决方案 考虑用动态规划的方法来解决,这里的: 阶段是:在前N件物品中,选取若干件物品放入背包 阅读全文
posted @ 2018-10-30 15:41 Stephen_F 阅读(414) 评论(0) 推荐(0)
摘要:优化多重背包的方式中两种常用的是单调队列和二进制优化,今天主要学习了一下二进制优化(征集各方资料)。 先说下 01 背包,有n 种不同的物品,每个物品有两个属性 :$ size $ 体积,$ value $ 价值,现在给一个容量为 $ w $ 的背包,问 最多可带走多少价值的物品。 int f[w+ 阅读全文
posted @ 2018-10-30 15:40 Stephen_F 阅读(519) 评论(1) 推荐(1)
摘要:"传送门啦" 这个题本质就是跑一边最长路,重点就是在怎么建图上。 我们可以把点权放到边权上面,即将每一个边的终点点权当做这个边的边权,这个题里就是将工钱 $ d $ 当做边权。 如果这一条边需要坐飞机才能到达,我们就可以将 $ d w $ 当做边权进行建图,这个时候你发现了什么?? 你会发现 $ d 阅读全文
posted @ 2018-10-30 11:00 Stephen_F 阅读(139) 评论(0) 推荐(0)
摘要:"传送门啦" 一道广度优先搜索的题目。 结构体含义: struct node{ int x,y,dir;//坐标,方向 int step;//当前步数 }; 方向的标号受上面定义的 $ dx[ ] , dy [ ] $ 数组 的影响 这个题要注意的就是初始化起点的问题。 起点可以向右、右下、下三个方 阅读全文
posted @ 2018-10-30 09:13 Stephen_F 阅读(193) 评论(0) 推荐(0)
摘要:题目意思就是:最大化一个区间的和与这个区间的最小值的乘积。 换一个角度看问题,如果我们穷举一个最小值 $ a_i $ ,然后往左右扩展,显然是对的,复杂度 $ O(n^2) $。所以我们要优化一下这个过程。 首先扩展这个过程的原则就是所有加入这个区间的数都必须小于选定的最小值 $ a_i $,那么我 阅读全文
posted @ 2018-10-29 20:06 Stephen_F 阅读(145) 评论(0) 推荐(0)
摘要:"传送门啦" 首先要将第n个盘子从x到y,那么就要把比n小的盘子全部移到6 x y,然后将n移到y 仔细想想:6代表的是3根初始柱,3根目标柱。 6 (x+y) 便是我们的中转柱了,因为到这个位置是最优的。 感觉题目有锅啊。 include include include include using 阅读全文
posted @ 2018-10-29 19:30 Stephen_F 阅读(276) 评论(0) 推荐(0)
摘要:"传送门啦" 这个题总体思路就是先搜索在 $ dp $ void dfs(int keep,int now){ //使用 放弃 if(now m) return; //已经放弃超过m个了,就退出 if(keep == n){ if(now == m) dp(); return ; } ///如果搜索 阅读全文
posted @ 2018-10-29 18:37 Stephen_F 阅读(202) 评论(0) 推荐(0)
摘要:"传送门啦" 一道经典的搜索剪枝题,不废话,步入正题。 分析: 一、输入时手动过滤不合法的情况 二、很明显我们要枚举把哪些棍子拼接成原来的长棍,而原始长度(原来的长棍的长度)都相等,因此我们可以在 $ dfs $ 外围枚举拼接后的每根长棍的长度。那枚举什么范围呢? 其长度至少是最长的一根木棍,此时最 阅读全文
posted @ 2018-10-29 15:45 Stephen_F 阅读(292) 评论(0) 推荐(0)
摘要:"传送门啦" 这个题也是一个单调队列来优化的 $ dp $ ,我们考虑这个题,这个题让我们求出有多少奶牛会觉得拥挤,如果我们还像 "琪露诺" 那个题那样单纯用一次单调队列肯定是不行的,因为牛觉不觉得拥挤是受左右的影响,所以我们选择从前往后、从后往前用两遍单调队列。 一开始就是在 $ push $ 元 阅读全文
posted @ 2018-10-29 11:25 Stephen_F 阅读(277) 评论(0) 推荐(0)
摘要:"传送门啦" 本人第一个单调队列优化 $ dp $,不鼓励鼓励? 琪露诺这个题,$ dp $ 还是挺好想的对不,但是暴力 $ dp $ 的话会 $ TLE $ ,所以我们考虑用单调队列优化。 原题中说她只移动到区间 $ [i+L,i+R] $ 中的任意一格,所以我们单调队列在转移的时候 $ push 阅读全文
posted @ 2018-10-29 10:38 Stephen_F 阅读(170) 评论(0) 推荐(0)
摘要:传送门啦 分析: 这个题看起来像是个树形dp,嗯,就是看起来像。 所以我们就按树形dp的思路去分析就好了,这个题是一个树形dp的变形题。 和以前建树是一样的,我们用邻接表来进行储存。利用邻接表的特性,我们可以先加左边的点,再加右边的点,这样遍历的时候就可以先左后右了。 分析题意后我们设立几个数组: 阅读全文
posted @ 2018-10-28 19:42 Stephen_F 阅读(141) 评论(0) 推荐(0)
摘要:一、二分查找 首先明确一下二分查找可以解决的问题, 二分查找可以解决预排序数组的查找问题。只要数组中包含T(即要查找的值),那么通过不断的缩小包含T的范围,最终就可以找到它。一开始,范围覆盖整个数组,将数组的中间项与T进行比较,可以排除一般的元素,范围缩小一半。就这样反复比较反复缩小范围,最终就会在 阅读全文
posted @ 2018-10-28 18:05 Stephen_F 阅读(193) 评论(0) 推荐(0)
摘要:首先普及一下关于初赛的一些知识吧。 希望能用到。 快速排序具有最好的平均性能,但最坏性能就成了O(n^2)。 比如一个序列5,4,3,2,1,要排为1,2,3,4,5。按照快速排序方法,每次只会有一个数据进入正确顺序,不能把数据分成大小相当的两份,很明显,排序的过程就成了一棵树树的深度为n,那时间复 阅读全文
posted @ 2018-10-28 18:02 Stephen_F 阅读(169) 评论(0) 推荐(0)
该文被密码保护。
posted @ 2018-10-28 18:01 Stephen_F 阅读(2) 评论(0) 推荐(0)
该文被密码保护。
posted @ 2018-10-28 17:57 Stephen_F 阅读(3) 评论(0) 推荐(0)
摘要:传送门啦 这是写第一个概率期望dp。 一般看见这种题就想暴力了,看一下数据范围,暴力应该还是挺好想的吧。 暴力: 24分 注意到有6个测试点m=0m=0,则说明不能提出申请,那么只需要求出全图的两两之间的最短路,路径唯一确定。 52分 注意到另外有7个测试点m=1m=1,只能提出一次申请。我们可以直 阅读全文
posted @ 2018-10-28 17:50 Stephen_F 阅读(135) 评论(0) 推荐(0)
摘要:传送门啦 题意是删除一些边使原图剩P个节点,那么我们在进行树形dp的时候就要考虑这条是不是删,但这样就不太好转移。 那么我们转化一下,假设把所有的边先都删除,那么我们要考虑这条边是不是要加进去,这要就好转移多了,就是一个背包+树形dp。 阅读全文
posted @ 2018-10-28 17:46 Stephen_F 阅读(142) 评论(0) 推荐(0)
摘要:传送门啦 分析: 这个题我是看着翻译做的,感觉不是很难,很普通的一个树形dp 题目大意: 在一棵树上分离出三个子树,使这三个子树的点权和相等。 明确题目意思这个题就简单多了吧。 我们会发现每一棵子树的点权是固定的,因为点权总和固定,设每一部分的大小为W,那么我们就从下往上更新(因为树形dp的基本做法 阅读全文
posted @ 2018-10-28 11:29 Stephen_F 阅读(336) 评论(0) 推荐(0)
摘要:传送门啦 分析: 刚开始读完题后感觉很懵,怎么算都不是3,结果发现题目理解错了。题目要求的是求一个不降的序列,不是递减的(发现自己好傻) 看明白题就好做了吧。经典的区间dp题,合并果子大家应该都做过,那个题求一个代价,这个题换成合并次数了,也差不多。 本题要使一段序列合并成不下降序列,因为只能合并相 阅读全文
posted @ 2018-10-28 11:21 Stephen_F 阅读(194) 评论(0) 推荐(0)
摘要:传送门啦 分析: 一个裸的区间dp,我们只需要注意合并的时候并不像2048那样加倍,每次都加1就好了 阅读全文
posted @ 2018-10-28 10:49 Stephen_F 阅读(243) 评论(0) 推荐(0)
摘要:传送门啦 其实大家可以先看一下这个题 [USACO16OPEN]248 分析: 数据范围很奇特:n特别,a[i]特别——如果O(N^3)能接受就直接区间DP水过了,但是不行,于是考虑设计一个状态囊括a[i]。 注意到a[i]每次合并只+1,于是想到答案其实就是最大的被合并的数+1,并且可以按a[i] 阅读全文
posted @ 2018-10-28 10:42 Stephen_F 阅读(306) 评论(0) 推荐(0)
摘要:传送门啦 分析: 这个题看很多人都在用Floyd和倍增的方法来做的。 那我就用spfa来跑最短路吧 a[i][j][k]:表示从i到j是否存在长2^k的边。 预处理的时候就将这些边赋值成1 (长2^k的边)(再补充一下:这些边用1s就能走完) 注意一下: 预处理的时候k循环在最外层,因为要所有的从u 阅读全文
posted @ 2018-10-28 10:31 Stephen_F 阅读(133) 评论(0) 推荐(0)
摘要:传送门啦 分析: 我最开始想的是跑两遍最短路,然后记录一下最短路走了哪些边(如果有两条最短路就选经过边多的),打上标记。两边之后找两次都标记的边有多少就行了。 但。。。我并没有实现出来。 最后让我们看一下正解: 四边spfa+拓扑排序求最长边 先让我们考虑如何求两对点最短路的最长公共路径? 1.先明 阅读全文
posted @ 2018-10-28 10:27 Stephen_F 阅读(296) 评论(0) 推荐(0)
摘要:这个题调了一天。。 传送门 读完题目之后我们不难想出这个题是个tarjan缩点问题,因为尽量多的经过草场,所以一号点所在的强连通分量里左右的点都是不需要在进行走逆向边,所能到达的。 然后问题就落在怎么处理我们走这一次逆向边上。 仔细看题目要求,题目要求我们必须从一号点出发,最后回到一号点。所以我想到 阅读全文
posted @ 2018-10-28 09:48 Stephen_F 阅读(173) 评论(0) 推荐(0)
摘要:传送门啦 分析: 题目描述不说了,大意是,求一段区间内不同元素的种数。 看到区间,我们大概先想到的是暴力(然后炸掉)、线段树、树状数组、分块。 下面给出的是一种树状数组的想法。 首先,对于每一段区间里的数,如果出现重复的元素,我们只需要看最后一个就好了。所以,我们可以对所有需要查询区间的右端点进行从 阅读全文
posted @ 2018-10-28 09:34 Stephen_F 阅读(259) 评论(0) 推荐(0)
摘要:传送门啦 分析: 树形dp刚刚入门,这是我做的第一个一个点同时受父亲节点和儿子节点控制的题目。 由于这个题中某一个点放不放保安与父亲和儿子都有关系(因为线段的两个端点嘛),所以我们做题时就要考虑全面。 假设dp数组为f[i][j]:其中f[i][0]表示选择自己(本身这个点),f[i][1]表示自己 阅读全文
posted @ 2018-10-28 09:27 Stephen_F 阅读(276) 评论(0) 推荐(0)