摘要:
A 这个东西随便特判一下就好了。 code: using namespace std; int n,m,a,x,y; int main(){ freopen("1.in","r",stdin); re int i;scanf("%d%d%d%d",&n,&a,&x,&y);if(n<=a) prin 阅读全文
摘要:
题面传送门 这个$n$这么小肯定是拿来状压的。 我们考虑设$F_$为仅用$i$种公司生成的树方案数。 但是这个东西不是很好做,我们考虑设一个弱一点的状态:$G_i$表示用了$i$个公司的方案数。 这个$G$显然可以状压在$O(n32n)$时间内达到。 然后考虑$G$怎么推出$F$ 假设我们$F_{1 阅读全文
摘要:
题面传送门 我们将每个点拆成入点和出点,然后每条边入点和出点连边,表示这两个点可以在一条路径上。 那么总的答案就是点数减去匹配数。 输出方案这个东西也很好搞,就是对于每个点找到答案,然后直接并查集维护即可。 code: #include<bits/stdc++.h> #define I inline 阅读全文
摘要:
题面传送门 这种强制选$k$的一般就是wqs二分。 我们考虑二分一个数,然后将所有和$s$相连的边加上这个数。 然后跑完wqs二分看看是不是$k$条边,如果大于则增大左边界,反之缩小右边界。 这样时间复杂度是$O(mlogmlogv)$的过不去。 可以发现时间复杂度瓶颈在排序上。 我们每次只对固定的 阅读全文
摘要:
题面传送门 这个东西肯定有一个性质。 那么这个性质就是对于每个最小生成树同种权值的边所联通的点其实是一样的。 有了这个结论就很好做了,枚举每个权值然后其它树边缩点,然后跑矩阵树定理即可。 时间复杂度$O(nm+n^3)$ code: #include<bits/stdc++.h> #define I 阅读全文
摘要:
题面传送门 介绍一个结论:无向无权图的生成树个数是度数矩阵减去邻接矩阵去掉任意行列的行列式的值。 然后有权图就是将度数改为权值。 有向图的话需要考虑是内向树还是外向树,内向树每个点权值是出边,外向树是入边。 然后就可以开开心心$O(n^3)$了。 code: #include<bits/stdc++ 阅读全文
摘要:
行列式大概是对于一个矩阵让你算这么一个数:\(\sum\limits_{p}{(-1)^{τ(p)}\prod\limits_{i=1}^{n}{a_{i,p_i}}}\) 直接根据定义算这个东西是$O(n!)$的显然不行。 我们考虑如果一个行列式的下三角是空,那么它的权值就是对角线乘积。 所以我们 阅读全文
摘要:
很妙的一道题。 首先我们考虑将所有老鼠都进左边能进的且最优的洞。 然后有些老鼠其实是可以反悔的去选右边的洞,如果设第$i$只老鼠原来连$j$,反悔去连$k$,那么对答案的贡献就是$p_k-2x_i+p_j$ 可以发现这个东西对$k$独立,那么我们用一个堆维护即可。 但是一个洞也可以反悔不去选那个老鼠 阅读全文
摘要:
卡常题差评。 首先这个东西我们可以枚举中间那个然后扫描线,那么就变成右边不超过某个值的对左边的逆序对个数这个东西可以直接线段树$O(nlogn)$搞。 但是这样常数大的和*一样,我们考虑换一种方法。 我们枚举第一个点,那么其实后面的方案数就是大于第一个点随意排列的方案数减去三个点连续上升的方案数。 阅读全文
摘要:
A 显然对于第$i$个数为$2i+1$最优。 那么直接模拟即可。 code: #pragma GCC optimize(2) #include<bits/stdc++.h> #define I inline #define max(a,b) ((a)>(b)?(a):(b)) #define min 阅读全文
摘要:
大下分,没写的题目只能等到回去再写了。 A 这个东西显然是每个数的末位置和初位置的差为2的倍数。 然后对于相同的数随便搞搞即可。 code: #include<bits/stdc++.h> #define I inline #define max(a,b) ((a)>(b)?(a):(b)) #de 阅读全文
摘要:
感觉像是一种模拟费用流。 首先这个东西费用的计算式为$P_i+(j-i)\times m$ 拆开变成$P_i-mi+mj$,这个东西对于两边独立。那么我们维护一个关于$P_i-mi$的单调上升的单调队列。 对于越往前的位置费用越小,但是流量越小。 那么挨个弹飞即可,然后对单调队列打上整体标记。 时间 阅读全文
摘要:
你看到这种东西就想到树的直径。 然后随便口胡反证一下就可以知道就是两种情况:一种是一条是直径,另一条是除去直径后的子树的最大直径,另一种是直径扣掉一段,然后扣掉的两个端点分别向下挂两条链。 第一种情况跑出直径随便处理,第二种情况预处理前缀$max$随便搞搞。时间复杂度$O(n)$ code: #in 阅读全文
摘要:
首先如果你做过CSP2019纪念品那道题你大概很快就会想到差分。 因为我们在第一天买进第三天卖出等同于第一天买进第二天卖出,第二天卖出第三天买进。 然后第一问就是对于所有$>0$的数加起来就好了。 第二问有一个simple的想法就是统计连续$\geq 0$的个数,但是会有单独$0$的情况。 转化一下 阅读全文
摘要:
首先你有一个$O(n2logk)$的显然做法:枚举重复路径两个端点,计算重复路径和非重复路径的长度,然后三分最大值即可。 这个东西显然过不去,发现瓶颈在三分上,考虑优化。 发现对于一个固定的重复路径长度,非重复路径肯定越短越好。 那么不就只用三分$n$次了? 时间复杂度就变成了$O(n2)$ cod 阅读全文
摘要:
你会发现这个东西看上去很玄学。 然后这个你会发现其实$2$和$3$是互不影响的。 所以我们对于每个数的后继都找到然后状压一下看看最大值然后最后将所有加起来即可。 注意如果一个数被算过了那么打上标记不再算。 时间复杂度$O(能过)$ code: #include<bits/stdc++.h> #def 阅读全文
摘要:
题面传送门 出题人总是喜欢让李超上树( 这个东西显然树剖+线段树。 我们将修改拆成两端,那么上行那一段的直线方程就是$y=-ad_x+d_ux+b$ 下行同理,那么直接维护即可,时间复杂度$O(nlog^3n)$,但是那个东西常数很小。 code: #include<bits/stdc++.h> # 阅读全文
摘要:
题面传送门 李超线段树的板子。 李超线段树是一种利用了标记永久化的线段树。每个区间存储的是这个区间的露在最上面最大的线段。 但是因为是标记永久化所以这个存储的东西本身就是不严格的。 有了这个定义就很好做了。 我们对于每个线段先拆成logn个扔到线段树对应区间,然后再分别插入。 插入的时候根据定义随便 阅读全文
摘要:
我们考虑对询问差分,设$f(l1,r1,l2,r2)\(为左端点在\)[l1,r1]\(中,右端点在\)[l2,r2]$中的答案。 那么一个询问就变成$f(1,r,1,r)-f(1,l-1,1,l-1)-f(1,l-1,l,r)$ 前面那个十分平凡,我们考虑后面那个。 将询问离线,然后就变成每次加入 阅读全文
摘要:
看到这种平均数的题目肯定想到分数规划啊。 首先二分一个$mid$,然后每个点的点权减去$mid$,就变成了对于每个点求树上的包含一个点的连通块最大大小。 这个显然是平凡换根dp首先一边dp弄出子树内,然后再来一次算父亲的贡献。 时间复杂度$O(nlogk)$ code: #include<bits/ 阅读全文
摘要:
这个东西直接算显然不好算,我们考虑将其中心爆破。 如果我们枚举第三个位置$l$,再枚举第四个字符$c0$,那么一二位的方案数是平凡的。 考虑如果时间复杂度允许,我们枚举第五个位置$r$,设$S(c,l,r)\(为\)[l,r]$中$c$的数量,那么答案就是$S(c,l,r)\times S(c,r, 阅读全文
摘要:
题面传送门 首先我们来看一道弱化版P5268 [SNOI2017]一个简单的询问 这个东西显然一遍差分然后莫队即可。 具体的,对于每个询问$F(x,y,l,r)$差分成$F(1,y,1,r)-F(1,y,1,l-1)-F(1,x-1,1,r)+F(1,x-1,1,l-1)$ 然后就可以随便做了。 这 阅读全文
摘要:
题面传送门 看到这个权值计算式直接一脸懵逼。 然后枚举了所有情况发现权值都是$x_22y_22-x12y12-x22-y22+\sum\limits_{(x_i,y_i)\in S}{x_i2+y_i2}$ 这就要我们令后面那个东西最小。 因为每走一步和是一样的所以根据基本不等式我们要让他尽可能贴近 阅读全文
摘要:
lxl的分治都场切了这道题的类分治居然没想到 考虑反着做这个东西。 反着做有一个好处就是可以$O(1)$用并查集处理一个点在一列中最近的两个坏点。 我们发现每次答案增大就是增大包含正在添加点的矩形。 这个东西很好做,我们将正在处理的点的这一行每个点的上下界都查出来,然后枚举左部点,右部用双指针指出分 阅读全文
摘要:
考试的时候自己是个sb。 首先对于每个质因数答案互相独立。 然后我们要让有某个质因数的左右都有这个质因数。 那么我们对于一个有$n$个的质因数,要么让这$n$个位置都有这个质因数,要么让其余各处有这个质因数。然后就好做了。 code: #include<bits/stdc++.h> #define 阅读全文