随笔分类 - 其他 - 模型/总结/重要
摘要:新学 segment-tree-beats. 这道题在区间取 min/max 的基础上还有一个区间加,那么显然要先做区间加,再取 min/max. code: // bzoj 最假女选手 #include <cstdio> #include <algorithm> #include <cstring
阅读全文
摘要:最小割. 显然按位拆分,然后对于有矛盾的连流量为 1 的边,代表如果然不同颜色需要花费 1 的代价. 跑一个最大流即可. code: #include <bits/stdc++.h> #define N 560 #define ll long long #define setIO(s) freope
阅读全文
摘要:非常经典的最小割模型. code: #include <bits/stdc++.h> #define N 3006 #define ll long long #define setIO(s) freopen(s".in","r",stdin) using namespace std; const l
阅读全文
摘要:这类最优化问题的本质是决策一个点选还是不选. 那么,我们可以用最小割帮我们决策到底选还是不选(因为最小割的本质是将元素划分成两个集合的最小代价) 然后每条边显然有断开的代价,描述出代价的关系和差量题就做出来了. code: #include <cstdio> #include <cstring> #
阅读全文
摘要:题意:有 $n$ 种牌,每种牌有 $C$ 张. 有两种方法能组成一叠: - $(i,i+1,i+2)$ - $(i,i,i)$ 一副牌是合法的,当且仅当这副牌能被分成若干叠. 给出牌的种类数 $n$ 以及每种的张数 $C$,和每种牌必选的个数.(如果该牌必选 $k$ 张,则有 $C-k$ 张是可选可
阅读全文
摘要:当相邻字母不相同的时候做法显然,相同的时候将相同区间提取出来,然后按照不同做就行. code: #include <bits/stdc++.h> #define ll long long #define N 1000006 #define setIO(s) freopen(s".in","r",st
阅读全文
摘要:碰到这种题第一反应就是找循环节. 我们发现我们就是要求 $a[i]+P \times k=b[i] ( \mod Q)$ 中 $P$ 的 k 的个数. 那么对于 $a[i]$ 来说,最大步数为 $\frac{T-1-a[i]}{P}$. 而我们发现 $a[i]+ P \times k$ 的循环节是
阅读全文
摘要:这个可以爆搜,如果搜出来环的话就一定不合法. 这个时间复杂度是 $O(n^4)$ 的. 但是我们发现,如果向右侧搜的话右侧许多方块会把很多状态都提前搜出来了. 所以我们可以从左向右枚举,搜左面.从右向左枚举,搜右面. 这样时间复杂度就是 $O(n^3)$ 的了. code: #include <bi
阅读全文
摘要:题意:给定一个数列,单点修改,求大于 $b_{i}$ 的极大连通块数目. 有一个常见的套路:考虑 $i$ 与 $i-1$. 当新加入 $i$ 时,$1$ ~ $a[i]$ 部分都新加入了一个连通块,然后我们发现我们多加了 $1$ ~ $min(a[i-1],a[i])$ 这一部分. 那么这就对应了一
阅读全文
摘要:这个题求完斯坦纳树后再搞一个类似于子集 DP 就行了. 我写的好像有点麻烦,但本质是相同的. code: #include <bits/stdc++.h> #define N 3006 #define M 13 #define inf 0x3f3f3f3f #define ll long long
阅读全文
摘要:这道题和网络收费那道题的套路是一样的. 都是直接枚举每一个点的状态. 但是要注意:这里枚举每个点的状态是基于 dfs 的,所以有递归式:$f(T)=4\times f(\frac{T}{2})$ (算两次) 那么就有 $f(ROOT)=4^n$. 这个是仅考虑 dfs 部分的复杂度,要是把背包部分算
阅读全文
摘要:神仙题!!!! 其实还是有一点没有搞懂,但是大体上差不多懂了. code: #include <bits/stdc++.h> #define ll long long #define N 3200020 #define setIO(s) freopen(s".in","r",stdin) using
阅读全文
摘要:显然,我们可以将每个东西的 $a,b$ 属性转换成二维坐标系中的点. 那么我们每次查询的时候查的是一个右下角矩阵. 没有被套的数量等于矩阵内总数量减去矩阵内可以套其他物品的数量. 我们考虑按照 $a$ 从大到小依次处理. 那么对于 $(x,y)$ 来说,显然匹配一个 $(x',y')$ 满足 $y'
阅读全文
摘要:好神仙的一道题! 由于每个门对应的钥匙仅有一把,所以我们可以确定门和门之间的相对解锁顺序. 比如,解锁门 $(x,x+1)$ 的要是在 $[1,x]$ 之间的话 $x+1$ 无论如何也到不了 $x$ 这一侧,但是 $x$ 有可能可以到达 $x+1$ 这边. 所以我们就先去解锁 $x+1$,然后再去解
阅读全文
摘要:这道题真考验一个人的数学感知啊..... 看到 $\frac{b- \sqrt d}{2}$ 的形式就要想到这是一个一元二次方程的一个根之一,然后去解. 想到这一步的话就好做了,因为我们可以列一个关于 $n$ 的递推式,然后矩阵乘法加速即可. 代码就不贴了....
阅读全文
摘要:显然,如果不出现重复数字的话直接贪心填就是正确的. 然而,当出现重复数字时这个贪心就错了. 将这个问题抽象成树是显然的. 我们先将所有数从大到小排. 对于大小为 $size[i]$ 的 $i$ 来说,肯定选当前能选的第 $size[i]$ 大的. (设为 $x$) 那么,选择完 $x$ 后,显然 $
阅读全文
摘要:大大大数据结构题. 我们发现,如果 $k=2$,答案就是树的直径. 而 $k>2$ 时,相当于选择 $k$ 个叶子,使得这些叶子的并最大. 我们有一个显然的贪心:$k+1$ 的答案一定是在 $k$ 的答案上加一个叶子. 如果不考虑修改,这其实就是长链剖分. 即 $k$ 时的答案就是大小为前 $k$
阅读全文
摘要:这种出现异或的题一般来说都是进行二进制拆位,然后按位考虑的. 我们考虑第 $i$ 位是否为 1. 不妨模 $2^{i+1}$,排除前面的影响. 那么一对 $a[k]+b[k]$ 中第 $i$ 位为 1 的条件是: 1. 由后面进位,得 $i$ 位为 1. 2. 两个位置都是 1,但是进位后还是 1.
阅读全文
摘要:好神仙的数据结构题呀! code: #include <cstdio> #include <cstring> #include <vector> #include <cmath> #include <algorithm> #define BL 250 #define N 100006 #define
阅读全文
摘要:CF1305C 题解: 我们发现虽然 $n$ 很大,但是模数很小,所以相当于 $n$ 个数对 $m$ 取模后不能有重复数字. 那么其实这个 $n$ 最大也就是 $m$ ,直接 $O(m^2)$ 暴力算就行了. code: #include <bits/stdc++.h> #define ll lon
阅读全文

浙公网安备 33010602011771号