摘要:
题面传送门 如果没有x就是2-SAT裸题。 具体的,如果当前$x$不满足,直接跳过,如果$y$不满足,那么连边如果$x=nx$满足,那么$x=nx1$满足。其它就正常连边。 然而这题有x。 考虑到x的数量很少,我们可以直接爆搜每个x是$a$还是$b$还是$c$,但是这样不优。 发现其实$a$与$b$ 阅读全文
摘要:
题面传送门 我们设$F_{i,j}$表示$i,j$天内都走同一条路径的最短路的权值,那么就是把只要在$[i,j]$内不能走的都不能走,然后跑spfa即可。 然后开始dp,设$dp_i$表示到$i$天的最小花费就可以得到$dp_i=dp_j+F_{i+1,j}\times (i-j)+k$ 直接搞即可 阅读全文
摘要:
题面传送门 我们考虑拆点,将一个点拆成$1$与$0$两个点。 考虑怎么建图,$a=na$或$b=nb$成立就是如果$b=nb\bigoplus1$那么$a=na$,连一条$b$的$nb\bigoplus1$到$a$的$na$的边表示一旦选$nb\bigoplus1$就一定是$na$ 然后如果两点在一 阅读全文
摘要:
题面传送门 很妙的一道题。 矩阵积和式是没有多项式解法的,我们考虑这个东西有什么性质。 首先我们考虑矩阵积和式的组合意义,一个二分图左右连边的所有完美匹配的权值之和。 想到这样一个转化,我们将每条边换成$w-1$,然后将所有匹配边数为$s$的匹配乘上$(n-s)!$即为答案因为剩下的边能够任意匹配。 阅读全文
摘要:
题面传送门 显然线段树合并$O(nlogn)$可惜被卡了。 我们考虑另外一种写法。 首先对于每个点要求$k$级祖先。因为没有强制在线所以不用长链剖分,直接树上dfs一边然后开栈存储即可。 再将每个询问挂在$k$级祖先上再dfs一遍,这一次对于每个询问,减掉遍历子树前的答案,加上遍历子树后的答案就是子 阅读全文
摘要:
题面传送门 臭名昭著的ODT板子。 ODT就是用set维护相同的区间,数据随机且有区间推平操作可以$O(mlogn)$ 那这样就很简单了,直接找到两个块裂开来然后剩下的随便做。 code: #include <vector> #include<iostream> #include<cstdio> # 阅读全文
摘要:
题面传送门 口胡五分钟,卡常两小时。 首先这种平均值的东西我们就考虑分数规划。 然后就是一个费用流问题,我们把每条边换成$A_{i,j}-B_{i,j}\times mid$ ,然后判断最后费用是否大于$0$ 然后这个就被卡了/kk 迫不得已加了几个剪枝然后判了两个点才过去。 code: #incl 阅读全文
摘要:
题面传送门 首先这种生成树计数想到Prufer序列。 然后因为度数为$d_i$的点会在Prufer序列中出现$d_i-1$次所以直接重排列公式即可。 然而这个没有模数什么的。 于是就要分解完质因数后再乘。 时间复杂度$O(nlogn)$ code: #include <vector> #includ 阅读全文
摘要:
题面传送门 挺水的题,但是没开long long就WA了一发。 首先我们考虑如何确定最佳烘焙顺序,这样才能用乱七八糟的数据结构维护。 设第$i$个蛋糕烘焙完的时间是$t_i$,那么这个蛋糕的费用就是$l_i-t_i$ 把全部加在一起我们就可以发现我们其实可以把这两个分开算,即用$SumL$减去$Su 阅读全文
摘要:
题面传送门 这个东西主要用于生成树计数一类问题。 对于一个$n$个点的树,它的Prufer序列长度为$n-2$且这两者一一对应。 所以这个就很好解释了$n$个点生成树为$n^$个。 一棵树转化成prufer序列是这样的: 找到一个编号最小的叶子节点,将这个叶子节点的父亲加入,并删除这个叶子节点,直到 阅读全文
摘要:
题面传送门 真正跑出来的时候被吓到了跑的是真的快。 首先这种题目肯定要跑出最小割树。在最小割树上面乱搞。 然后变成经过树上每一个点,两点距离为路径最小值求最大路径。 我们肯定想让最小的边经过的次数最小。 那么我们让它只走一次。 把这条边断开,得到两棵树,添加一条路径,是从一棵树的终点到另一棵树的起点 阅读全文
摘要:
题面传送门 显然我们不能爆枚点对算最小割。 然而这个东西其实可以把最小割树跑出来然后搞。 但是因为求的是种类个数所以连最小割树都不用建出来直接扔到一个map里面即可。 时间复杂度$O(n^3m)$但是根本跑不满。 code: #include <vector> #include<iostream> 阅读全文
摘要:
题面传送门 真 块长的艺术。 这种东西显然树类型维护不了,我们考虑分块。 根据套路我们维护每个块的有序数列记为$B$,然后每次修改归并,每次查询先二分然后零散块暴力查整块二分即可。 设块长为$S$,修改复杂度$O(S+\frac)$,查询复杂度$O(logn(S+\fraclogS))$ 我们发现零 阅读全文
摘要:
题面传送门 看到一道题口胡出最小割树的做法了但是不会写。于是赶紧来学习一下。 首先最小割树的定义是:有这么一棵树,树上的边$(x,y)$的权值为原图$x,y$之间的最小割的值。并且将这颗树的这条边断开划分出的两个点集是原图断开最小割的两个点集。 那么依据这个东西建树,先随便找到两个点,求出最小割,划 阅读全文
摘要:
题面传送门 这个东西你显然不能写个高斯消元$O(n3)$弄过去。 但是这个系数又是那么的有规律。 所以我们考虑一种人为构造的消元办法使得其一定能消完所有未知数,这样我们只要考虑等式右边的加减即可。 先把最后要求的方程扔在最后面然后最后取相反数即可。 首先仿照高斯消元的方法我们先考虑给第一项消掉,显然 阅读全文
摘要:
题面传送门 震惊!Ynoi居然不卡常。 首先你看到这个东西开了$2.5s$而且数据范围只有$4\times 10^5$就大概知道这个是个根号了。 然后又发现这个有很强的弹飞绵羊既视感。 于是考虑分块。 考虑维护和弹飞绵羊一样的一个东西$B_i$表示$i$跳出当前块到哪里。 然后零散块暴力重构即可。 阅读全文
摘要:
题面传送门 可以发现我们要计算的其实是给定矩形的一些左下角和右上角求最大面积。 对于左下角,如果我们有两个左下角$(x1,y1),(x2,y2)$且$x1>x2,y1>y2$那么第一个左下角其实是没有用的。】 右上角同理。 然后显然就可以决策单调性了。 时间复杂度$O(nlogn)$ code: # 阅读全文
摘要:
题面传送门 不知道这道题为什么有紫题难度,随便写写就过了。 容易想到dp解决这个问题。 我们设$f_{i,j,t,0/1}\(表示当前经过了\)[i,j]$区间内的小精灵,经过了$t$的时间,在左/右端点能得到的最大收益。 这个东西随便从左右转移一下即可。 然后你会发现这个东西是$O(n2MaxT) 阅读全文
摘要:
题面传送门 你会发现这道题时限松得不可思议 这种东西离线都是根号的肯定在线考虑分块。 然后显然预处理$F_{i,j}$表示$i$到$j$块间的答案。同时我们处理$G_{i,j}$表示前$i$个块中小于等于$j$的元素个数用以处理$F$ 然后两个散块之间直接归并就好了。 散块内部用树状数组预处理。 散 阅读全文
摘要:
题面传送门 这个东西显然dp可以搞。 设$f_i$为$i$处符合的最大符合数。 考虑一个$j$能转移到$i$的条件。 \(j<i\),\(a_i<a_j\),\(i-j\geq a_i-a_j\) 把第三个变形一下就是$i-a_i\geq j-a_j$ 好的我们可以cdq三维偏序了 注意观察一下,后 阅读全文
摘要:
题面传送门 我也不知道这个怎么一只根号一只log过1e5的…… 首先我们不考虑$a$这个限制。 设$F(x)$为$x$的约数和,这个可以枚举倍数$O(nlogn)$解决。 那么显然有式子$\sum\limits_{\sum\limits_{F_{gcd(i,j)}}}$ 提前枚举$gcd$就有$\s 阅读全文
摘要:
题面传送门 首先我们来找一下这个题目有什么特殊性质。 考虑最后生成的排列$A$,则这个$A$一定没有连续四个$A_i$满足$A_i>A_{i+1}>A_{i+2}>A_{i+3}$,因为序列长度只有3。换句话说,我们将这个序列将前缀max分段,段的长度不会超过$3$ 然而这个也不是充要条件。 我们发 阅读全文
摘要:
题面传送门 我们考虑怎么确定一个序列的深度。 可以肯定的是我们选出来的子序列一定是长度为$2x$的,前$x$个为$($,后$x$为$)$ 如果一个序列是确定的,我们显然可以维护两个值$d1,d2$表示当前位置左边的$(\(个数与右边的\))$个数。 因为每次要么是$d1$加一,要么是$d2$减一,所 阅读全文
摘要:
题面传送门 吐槽一下为什么求一次函数解析式然后暴力带入会WA,然后求斜率比较就对了啊。 首先那个式子不是很好处理,我们来考虑这个式子的组合意义。 容易想到这个就是非边界上的点选与不选,即选点集能构成凸包的方案数。 然后这个容斥一下,枚举共线点即可。 时间复杂度$O(n^3)$ code: #incl 阅读全文
摘要:
题面传送门 这个其实是板子题。 容易发现我们需要让每条边的下界是$1$,上界是正无穷。 所以模仿最大流一样的建边跑最小费用最大流然后再加上每条边本来的费用即可。 时间复杂度$O(能过)$ code: #include <vector> #include<iostream> #include<cstd 阅读全文