随笔分类 -  算法

摘要:我们发现正着枚举删除哪些叶子是错的,但是贪心枚举留下哪些却是对的. 我们枚举的时候需要动态查一个点到根有几个点没染色,和动态染色. 支持这些操作的数据结构非 LCT 莫属 code: #include <bits/stdc++.h> #define N 1000004 #define lson t[ 阅读全文
posted @ 2019-11-10 18:35 EM-LGH 阅读(119) 评论(0) 推荐(0)
摘要:考试 T2,是一个脑筋急转弯. 最暴力的贪心是每次先选左,再选右,再选左..... 然而这么做在一些情况下是错的. 但是,我们发现我们的选法一定是 $LLLLRLRLRLRLR$ 或 $RRRRLRLRLRLRLR$ (易证明) 所以直接枚举第一次向左/右走多少次,然后剩余的直接 $O(1)$ 计算 阅读全文
posted @ 2019-11-06 22:03 EM-LGH 阅读(246) 评论(1) 推荐(0)
摘要:题意: $mhy$ 住在一棵有 $n$ 个点的树的 $1$ 号结点上,每个结点上都有一个妹子。 $mhy$ 从自己家出发,去给每一个妹子都送一台电脑,每个妹子拿到电脑后就会开始安装 $zhx$ 牌杀毒软件,第 $i$ 个妹子安装时间为 $Ci$。 树上的每条边 $mhy$ 能且仅能走两次,每次耗费 阅读全文
posted @ 2019-11-02 15:35 EM-LGH 阅读(140) 评论(0) 推荐(0)
摘要:给一颗树,$1$ 号节点已经被染黑,其余是白的,两个人轮流操作,一开始 $B$ 在 $1$ 号节点,$A$ 选择 $k$ 个点染黑,然后 $B$ 走一步,如果 $B$ 能走到 $A$ 没染的节点则 $B$ 胜,否则当 $A$ 染完全部的点时,$A$ 胜。求能让 $A$ 获胜的最小的 $k$ 我们发现 阅读全文
posted @ 2019-10-31 00:24 EM-LGH 阅读(155) 评论(0) 推荐(0)
摘要:题意:在一款电脑游戏中,你需要打败 $n$ 只怪物(从 $1$ 到 $n$ 编号)。为了打败第 $i$ 只怪物,你需要消耗 $d[i]$ 点生命值,但怪物死后会掉落血药,使你恢复 $a[i]$ 点生命值。任何时候你的生命值都不能降到 $0$(或 $0$ 以下)。请问是否存在一种打怪顺序,使得你可以打 阅读全文
posted @ 2019-10-30 23:27 EM-LGH 阅读(151) 评论(0) 推荐(0)
摘要:题意:给定 $n$ 个括号序,让你从中选取一些括号序按照任意顺序拼接,最终生成一个合法的括号序列,求这个合法序列长度最大值. 题解:假设括号序列相对顺序固定,而我们要做的只是判断选还是不选的话可以转化为一个简单的背包问题: 令 $f[i][j]$ 表示考虑前 $i$ 个括号序,左括号比右括号多 $j 阅读全文
posted @ 2019-10-30 15:18 EM-LGH 阅读(198) 评论(0) 推荐(1)
摘要:第一次见到这个模型. 首先,不难得出砝码的种类不会超过 $log(10^9)$ 个,然后就不会分析了qaq... 那么,就说明一共只有 $30$ 多个本质不同的砝码. 考虑对每个背包进行状态的压缩:写成若干个砝码大小乘积的形式. 即 $v[i]=w[i]*a+w[i+1]*b+....$ 然后,将所 阅读全文
posted @ 2019-10-29 22:18 EM-LGH 阅读(127) 评论(0) 推荐(0)
摘要:如果没有限制,直接取前 $k$ 大即可. 有限制,则只有几种可能:奇换偶,偶换奇. 维护奇数偶数的前缀最小值和后缀最大值即可. code: 阅读全文
posted @ 2019-10-29 19:39 EM-LGH 阅读(126) 评论(0) 推荐(0)
摘要:这个真的好巧妙啊~ 如果只考虑点权的话显然直接按照权值大小排序即可. 但是加入了边权,就有了一个决策的问题. 于是,我们将边权分一半,分给两个端点. 如果一个人拿了两个端点,则边权都会加上. 否则,边权会抵消. 直接按照点权+一半边权排序即可. code: 阅读全文
posted @ 2019-10-29 18:44 EM-LGH 阅读(137) 评论(0) 推荐(0)
摘要:有一个小性质:就是一个下标排列的最小移动次数就是逆序对数. 我们发现最终形态一定是一个波峰. 那么我们求的就是形成波峰的下标最少逆序对数. 考虑将元素从小到大依次插入. 那么,对于第 $i$ 个元素,一定是放到左面或右面(就是从 1....left 或 right....n) 中的left和righ 阅读全文
posted @ 2019-10-29 16:32 EM-LGH 阅读(142) 评论(0) 推荐(0)
摘要:考试 T2,没想到真的就是一个大爆搜啊~ 搜索时几个剪枝: 1.剩余可用颜色要大于等于剩余步数 2.颜色从没用过的里找,然后用二进制状压存储. 3. 最重要的一个剪枝:如果一个颜色在之前序列中未出现过,且在之后的位置也不会强制出现,则所有这种情况的贡献都是相同的,只需算第一次的贡献,然后后面的依次累 阅读全文
posted @ 2019-10-29 14:31 EM-LGH 阅读(172) 评论(0) 推荐(0)
摘要:如果字符集无限大的话直接按照 $sa$ 的顺序依次填即可. 由于字符集非常小,所以要尽量填相同的字符. 我们知道 $sa$ 数组,也就知道了 $rank$ 数组. 那么考虑添加排名为 $i$ 的字符: 如果 $rank[sa[i-1]+1]>rank[sa[i]+1]$,说明 $sa[i]$ 的字典 阅读全文
posted @ 2019-10-28 16:58 EM-LGH 阅读(134) 评论(0) 推荐(0)
摘要:发现每一次切割都会使另一方向所有切割次数++. 而每一刀的代价就是 cost 切割次数,故贪心按照cost从大到小排序即可. cpp include define N 200000 define LL long long using namespace std; void setIO(string 阅读全文
posted @ 2019-10-28 16:39 EM-LGH 阅读(140) 评论(3) 推荐(0)
摘要:我感觉这道题挺神的~ 假设 $a[i]=b[i]$,那么我们可以将 $a$ 降序排序,然后你发现只要你按照 $1,3,5......n$ 这么取一定是合法的. 而我们发现 $2$ 比取 $3$ 优,取 $4$ 还比取 $5$ 优. 所以,我们可以这样: 强制性取第一个元素,然后其余 $\frac{n 阅读全文
posted @ 2019-10-22 16:27 EM-LGH 阅读(110) 评论(0) 推荐(0)
摘要:题意:给定一个环,环上有一些点包裹,你要从 $0$ 号点出发,然后每次带上一个容量为 $k$ 的背包. 问:如果要把所有的包裹都带回 $0$ 好点最少要走多少距离. 每一次只有 $3$ 种走法:走整圆,没走到半圆就返回(两个方向) 而我们可以贪心证明我们最多只会走一次整圆: 如果我们要走 $2$ 次 阅读全文
posted @ 2019-10-21 16:07 EM-LGH 阅读(191) 评论(0) 推荐(0)
摘要:考试的时候切的,类似HH的项链~ code: 阅读全文
posted @ 2019-10-11 20:47 EM-LGH 阅读(226) 评论(0) 推荐(1)
摘要:题意: 给定序列 $a,m$ 次询问,每次询问给出 $t,k$. 求 $a_{t}+a_{t+k}+a_{t+2k}+.....a_{t+pk}$ 其中 $t+(p+1)k>n$ 题解: 这种跳步数问题可以用根号分治来解决: 对于 $k$ 比较大的询问直接暴力跳,而对于 $k$ 较小的部分就通过预处 阅读全文
posted @ 2019-10-09 16:44 EM-LGH 阅读(168) 评论(0) 推荐(0)
摘要:题意:给定一棵树,树上有一些点是警察局,要求所有点到最近的警察局的距离不大于 $d$,求最多能删几条边 ? 题解: 考虑什么时候一条边可以被断开:这条边的两个端点被两个不同的警察局覆盖掉. 我们要设计一种染色方案,使得整棵树都被覆盖,且每个警察局覆盖的范围尽量小. 那么,我们可以使用 $BFS$ 算 阅读全文
posted @ 2019-10-03 11:29 EM-LGH 阅读(214) 评论(0) 推荐(0)
摘要:这个模型十分巧妙啊,好题好题~ code: 阅读全文
posted @ 2019-10-03 09:22 EM-LGH 阅读(191) 评论(0) 推荐(0)
摘要:题意:对于一个序列,假如说一个区间内最多能包含 $k$ 个不同的数,那么这个序列最少会被划分成几个区间 $?$ 输出 $k$ 为 $1\sim n$ 的答案. 我们每次选区间一定是贪心地将这个区间选地越大越好. 这道题有一个非常显然的主席树做法:从后向前扫,维护每一种数字出现最靠左位置,然后用主席树 阅读全文
posted @ 2019-10-02 14:47 EM-LGH 阅读(286) 评论(0) 推荐(0)