摘要:
$(x,y)$ 表示加完 $x$,再对 $y$ 取 max 的操作. 那么有 $(a,b)+(c,d)=(a+c,max(b+c,d))$ 然后对于两个标记取 max 的话是 $(max(a,c),max(b,d))$ 知道这些之后就好做了. 一定要注意:先更新历史最值标记,然后再更新当前最值(因为 阅读全文
摘要:
新学 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> # 阅读全文
摘要:
吸氧才能过,写一个分治就行. 这里讲一下构造方法:考虑对点集 $U$ 求最小割树. 随便选取两个点 $u,v$ 然后跑一个 $u$ 到 $v$ 的最小割. 然后有两条性质: 对于 $U$ 中的每个点,一定被划分到了 $u$ 集合或 $v$ 集合(废话) 对于 $u$ 集合点到 $v$ 集合点的最小割 阅读全文
摘要:
题意:有 $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 阅读全文