06 2021 档案
摘要:A 排序后模拟即可。 #include<bits/stdc++.h> #define I inline #define max(a,b) ((a)>(b)?(a):(b)) #define min(a,b) ((a)<(b)?(a):(b)) #define abs(x) ((x)>0?(x):-(
阅读全文
摘要:题面传送门 代数推导天地灭,组合意义保平安。 首先我们发现如果我们预处理组合数然后暴力计算是的很难优化。 我们考虑换一个思路。 我们知道的方案数。 那么原题目要求的就是$(-A_i,-B_i)(A_
阅读全文
摘要:题面传送门 为什么常数这么大啊是我人傻吗? 发现每条边只有选和不选两种情况,容易想到2-SAT 那么对于一条边有两种情况: 第一种情况就是如果它选,那么所有相邻的边都不能选。 第二种情况是如果它不选,那么所有相邻的同色边都必须选。 但是这样子建图是的。 每个点是独立的,在这个点一个端
阅读全文
摘要:题面传送门 如果没有x就是2-SAT裸题。 具体的,如果当前不满足,直接跳过,如果不满足,那么连边如果满足,那么满足。其它就正常连边。 然而这题有x。 考虑到x的数量很少,我们可以直接爆搜每个x是还是还是,但是这样不优。 发现其实与
阅读全文
摘要:题面传送门 很妙的一道题。 矩阵积和式是没有多项式解法的,我们考虑这个东西有什么性质。 首先我们考虑矩阵积和式的组合意义,一个二分图左右连边的所有完美匹配的权值之和。 想到这样一个转化,我们将每条边换成,然后将所有匹配边数为的匹配乘上即为答案因为剩下的边能够任意匹配。
阅读全文
摘要:题面传送门 显然线段树合并可惜被卡了。 我们考虑另外一种写法。 首先对于每个点要求级祖先。因为没有强制在线所以不用长链剖分,直接树上dfs一边然后开栈存储即可。 再将每个询问挂在级祖先上再dfs一遍,这一次对于每个询问,减掉遍历子树前的答案,加上遍历子树后的答案就是子
阅读全文
摘要:题面传送门 臭名昭著的ODT板子。 ODT就是用set维护相同的区间,数据随机且有区间推平操作可以 那这样就很简单了,直接找到两个块裂开来然后剩下的随便做。 code: #include <vector> #include<iostream> #include<cstdio> #
阅读全文
摘要:题面传送门 口胡五分钟,卡常两小时。 首先这种平均值的东西我们就考虑分数规划。 然后就是一个费用流问题,我们把每条边换成 ,然后判断最后费用是否大于 然后这个就被卡了/kk 迫不得已加了几个剪枝然后判了两个点才过去。 code: #incl
阅读全文
摘要:题面传送门 首先这种生成树计数想到Prufer序列。 然后因为度数为的点会在Prufer序列中出现次所以直接重排列公式即可。 然而这个没有模数什么的。 于是就要分解完质因数后再乘。 时间复杂度 code: #include <vector> #includ
阅读全文
摘要:题面传送门 挺水的题,但是没开long long就WA了一发。 首先我们考虑如何确定最佳烘焙顺序,这样才能用乱七八糟的数据结构维护。 设第个蛋糕烘焙完的时间是,那么这个蛋糕的费用就是 把全部加在一起我们就可以发现我们其实可以把这两个分开算,即用减去$Su
阅读全文
摘要:题面传送门 这个东西主要用于生成树计数一类问题。 对于一个个点的树,它的Prufer序列长度为且这两者一一对应。 所以这个就很好解释了个点生成树为个。 一棵树转化成prufer序列是这样的: 找到一个编号最小的叶子节点,将这个叶子节点的父亲加入,并删除这个叶子节点,直到
阅读全文
摘要:题面传送门 真正跑出来的时候被吓到了跑的是真的快。 首先这种题目肯定要跑出最小割树。在最小割树上面乱搞。 然后变成经过树上每一个点,两点距离为路径最小值求最大路径。 我们肯定想让最小的边经过的次数最小。 那么我们让它只走一次。 把这条边断开,得到两棵树,添加一条路径,是从一棵树的终点到另一棵树的起点
阅读全文
摘要:题面传送门 显然我们不能爆枚点对算最小割。 然而这个东西其实可以把最小割树跑出来然后搞。 但是因为求的是种类个数所以连最小割树都不用建出来直接扔到一个map里面即可。 时间复杂度但是根本跑不满。 code: #include <vector> #include<iostream>
阅读全文
摘要:题面传送门 真 块长的艺术。 这种东西显然树类型维护不了,我们考虑分块。 根据套路我们维护每个块的有序数列记为,然后每次修改归并,每次查询先二分然后零散块暴力查整块二分即可。 设块长为,修改复杂度,查询复杂度 我们发现零
阅读全文
摘要:题面传送门 看到一道题口胡出最小割树的做法了但是不会写。于是赶紧来学习一下。 首先最小割树的定义是:有这么一棵树,树上的边的权值为原图之间的最小割的值。并且将这颗树的这条边断开划分出的两个点集是原图断开最小割的两个点集。 那么依据这个东西建树,先随便找到两个点,求出最小割,划
阅读全文
摘要:题面传送门 这个东西你显然不能写个高斯消元弄过去。 但是这个系数又是那么的有规律。 所以我们考虑一种人为构造的消元办法使得其一定能消完所有未知数,这样我们只要考虑等式右边的加减即可。 先把最后要求的方程扔在最后面然后最后取相反数即可。 首先仿照高斯消元的方法我们先考虑给第一项消掉,显然
阅读全文
摘要:题面传送门 震惊!Ynoi居然不卡常。 首先你看到这个东西开了而且数据范围只有就大概知道这个是个根号了。 然后又发现这个有很强的弹飞绵羊既视感。 于是考虑分块。 考虑维护和弹飞绵羊一样的一个东西表示跳出当前块到哪里。 然后零散块暴力重构即可。
阅读全文
摘要:题面传送门 可以发现我们要计算的其实是给定矩形的一些左下角和右上角求最大面积。 对于左下角,如果我们有两个左下角且那么第一个左下角其实是没有用的。】 右上角同理。 然后显然就可以决策单调性了。 时间复杂度 code: #
阅读全文
摘要:题面传送门 不知道这道题为什么有紫题难度,随便写写就过了。 容易想到dp解决这个问题。 我们设区间内的小精灵,经过了的时间,在左/右端点能得到的最大收益。 这个东西随便从左右转移一下即可。 然后你会发现这个东西是$O(n2MaxT)
阅读全文
摘要:题面传送门 你会发现这道题时限松得不可思议 这种东西离线都是根号的肯定在线考虑分块。 然后显然预处理表示到块间的答案。同时我们处理表示前个块中小于等于的元素个数用以处理 然后两个散块之间直接归并就好了。 散块内部用树状数组预处理。 散
阅读全文
摘要:题面传送门 首先我们来找一下这个题目有什么特殊性质。 考虑最后生成的排列,则这个一定没有连续四个满足,因为序列长度只有3。换句话说,我们将这个序列将前缀max分段,段的长度不会超过 然而这个也不是充要条件。 我们发
阅读全文
摘要:题面传送门 我们考虑怎么确定一个序列的深度。 可以肯定的是我们选出来的子序列一定是长度为的,前个为,后为 如果一个序列是确定的,我们显然可以维护两个值表示当前位置左边的个数。 因为每次要么是加一,要么是减一,所
阅读全文
摘要:题面传送门 吐槽一下为什么求一次函数解析式然后暴力带入会WA,然后求斜率比较就对了啊。 首先那个式子不是很好处理,我们来考虑这个式子的组合意义。 容易想到这个就是非边界上的点选与不选,即选点集能构成凸包的方案数。 然后这个容斥一下,枚举共线点即可。 时间复杂度 code: #incl
阅读全文
摘要:题面传送门 这个其实是板子题。 容易发现我们需要让每条边的下界是,上界是正无穷。 所以模仿最大流一样的建边跑最小费用最大流然后再加上每条边本来的费用即可。 时间复杂度 code: #include <vector> #include<iostream> #include<cstd
阅读全文
摘要:题面传送门 写了个线性基暴力插入结果又T又WA 首先我们可以把这个东西看成二进制多项式。 然后这个二进制多项式的两个操作可以看成加减和位移。 我们考虑处理出,那么可以证明是的倍数是能被表示出来的充要条件。 因为都是的倍数而加减乘除并不影响这个。 处理可
阅读全文
摘要:题面传送门 像个sb一样写了树套树然后又卡空间又卡时间。 首先我们考虑一下没有深度限制怎么做。 考虑把每种颜色都拿出来建一棵斯坦纳树,所以斯坦纳树上的所有点都有这种颜色的一个贡献。 具体的,维护每个点最近的两个点的dfs序然后每个点加一,lca处减一即可。查询只要查dfs序上子树和即可。 现在是考虑
阅读全文
摘要:题面传送门 这道题首先考虑拆位,但是有加减法所以感觉很难做。 考虑另一种方法,把每种值出现的次数算出来然后再计算。 设为区间和为出现的次数,为前缀和为的出现次数。 那么就有 然后显然翻一下
阅读全文
摘要:题面传送门 感觉完全没有黑题难度啊。 首先最大值最小就想到二分答案。二分后转化成判定性问题。 然后我们将两两曼哈顿距离大于的点连边,我们只需要判断是否是二分图即可。 这个东西如果真的建边来空间复杂度很大所以直接隐式建边即可。 然后第二个问统计方案,可以发现如果在一个联通块内有两种情况,那么
阅读全文
摘要:题面传送门 容易想到费用流。 但是这道题真的数据很强啊。 对于每个点拆点以保证其只被选一次。 同时对于膜同余,就对于每个余数建一条链然后从这条链上进出。 对于加一减一要麻烦一点,首先要对于每个数建一条链然后从加一减一的那条链上进出。 然后注意一定要正序建边呀。 code: #include <
阅读全文