摘要:
题面传送门 介绍一下min-max容斥: \(min(S)=\sum\limits_{T\in S}{(-1)^{|T|+1}max(T)}\) 这个就是考虑除了$T=max(S)$的情况其它都能抵消掉,二项式定理证一下就好了。 这个式子似乎没有什么用处,因为一个$O(n)$的东西被变成$O(2n) 阅读全文
摘要:
题面传送门 这个题我们可以用[清华集训2012]串珠子的思想做掉。 设$f_i$为$i$个点的无向图数目,$g_i$为$i$个点的不连通图数目。 枚举最后一个点所在连通块大小可以得到$g_n=\sum\limits_{i=1}{n}{C_{i-1}{n-1}(f_i-g_i)f_{n-i}}$ 拆了 阅读全文
摘要:
题面传送门 看成nm同阶然后想了好久 首先这个恰好$k$个就很难搞,考虑变成至少$k$个然后二项式反演。 设$f(i)$为恰好$i$个,$g(i)$为至少$i$个。 $g$的话就是钦定$i*S$个位置和$i$个颜色多重排列剩下的随意。 但是如果直接二项式反演是$O(m2)$的。 看一下式子:\(f( 阅读全文
摘要:
初赛 Day 0 晚上写P4221 [WC2018]州区划分发现欧拉回路都不会写了我是个屑。 这说明初赛我肯定爆炸。 Day 1 上午去考提高,然后开幕雷击。 我不会Linux啊!!!然后反手排除了Windows下的cd,就不会了。 觉得ls应该是list的意思所以选了A 然后后面乱做。 出来和hy 阅读全文
摘要:
题面传送门 判欧拉回路写错调了一个多小时 首先可以$O(2nm)$处理出哪些是可以选的就有了$O(n3n)$的爆枚子集的做法。 不难想到子集卷积,但是子集卷积是卷两个没有关系的数组,但是这个是自己卷自己。 容易发现一个数枚举子集的过程是不可能从二进制和它个数相同的数拿答案的,这就意味着同一层算答案的 阅读全文
摘要:
反正知道怎么做就很水。 首先这个东西一眼不可做。 然后居然是最短路? 考虑找到一个最小的A,然后建立同余最短路。 定义$d_i$为模$A$余数为$i$的最小数,然后后面的直接填A就好了。 然后$L-1$和$R$分别算一次减一下即可,中间那个最短路跑一下就能过。 时间复杂度大概是$O(nA)$的。 c 阅读全文
摘要:
题面传送门 首先是二项式反演公式:$f_n=\sum\limits_{i=n}{m}{C_{n}{i}g_i}$可以得到$g_n=\sum\limits_{i=n}{m}{(-1){i-n}C_{n}{i}f_i}$ 这个直接把$g$代到$f$里面就化一下就出来了。 然后这道题直接求很难求,考虑求出 阅读全文
摘要:
题面传送门 ZJOI:我抄我自己。 首先这个题$k=1$和ZJOI2019基本是一样的。 我们考虑每个点成为五类点的概率。 第一种:走到但是不包含,不会算所以用一减去剩下所有类。 第二种:走到且全包含,就是包含当前区间且不包含父亲区间。 第三种:走不到但是全包含就是父亲的第二种加上父亲的第三种,也就 阅读全文
摘要:
题面传送门 首先这个$[45,-45]\(看上去就很不爽,于是顺时针旋转45一下然后变成\)[0,90]$ 然后就发现一个点只能被它左上角的点的折线拉到。 那么就是求覆盖所有点的不升字符列最少个数,经典转化一下就是最长上升子序列长度。 直接树状数组就好了。 code: #include<bits/s 阅读全文
摘要:
题面传送门 首先是牛顿迭代。 举个例子,你要求$x^2-a=0$并且你不会解一元二次方程。 然后你先找到一个$x_0$算出$x=x_0$的当前值。 然后求当前点$x_0$的切线,大概是$y=f'(x_0)(x-x_0)+f(x_0)$ 带入$y=0$就可以解得$x=x_0+\frac{f(x_0)} 阅读全文
摘要:
题面传送门 zj:这种屑题最多评个蓝 首先判一下无解,然后将同样的缩成一个点。 然后设$f_i$为最后有$i$个联通块的答案,所以最后答案容斥一下就好了。 这个东西分治的时候NTT合并答案就好了。 有亿点卡常,时间复杂度$O(nlog^2n)$ code: #include<bits/stdc++. 阅读全文
摘要:
题面传送门 n这么小就很诡异。 考虑设阈值$B$ 如果当前的$P_i>B$那么直接暴力建边就好了,这时候的边数是$O(\frac{n}{B})$的。 如果当前的$P_i<B$那么放到一起处理,发现如果$P$是相同的,那么位置$\bmod p$相同的全部位置只要在左右之间建边就好了,其它边是可以迭代进 阅读全文
摘要:
题面传送门 指导居然卡空间差评!!!! 首先肯定可以暴力建图然后跑费用流,每次增加一个流量,这样可以$O(n2m)$ 然后发现如果一行是一个连续没有障碍段那么肯定走到最后再换行一定不会更劣。 所以可以这样缩点,并把每个点拆成出点和入点限流,然后对于每个障碍点连出$m$条边即可。 时间复杂度$O(n2 阅读全文
摘要:
题面传送门 $n$这么大肯定只能矩乘(暴论 但是不能出现这个串的限制很难搞,考虑设$dp_{i,j}$表示第$i$位然后匹配到答案第$j$位。 然后如果预处理出kmp就可以$O(10nm)$搞了。 把这个递推改成矩乘就可以$O(m^3logn)$轻松跑过。 code: #include<bits/s 阅读全文
摘要:
题面传送门 这个题很屑啊强行套两个题上去。 首先肯定要从高到低枚举位然后看这一位是否可以为$1$ 然后问题转化为判定能否分成$i,i\in[A,B]$段,且或的值是一个给定数的子集,这个东西可以$O(n3)$的dp解决掉。 具体的,设$f_{i,j}$为分了$j$段,到了第$i$个数的方案数,转移的 阅读全文
摘要:
题面传送门 一眼线段树分治然而想想都会T 考虑什么更优的算法。 我们用线段树维护权值大于$w$的树上路径交,然后线段树上二分,看看树上路径交是否包含这个点即可。 时间复杂度$O(nlogn)$,需要使用$O(1)$LCA code: #include<bits/stdc++.h> #define I 阅读全文
摘要:
题面传送门 首先这个在树上的边肯定只是变小,不在树上的边肯定只是增大。 我们设在树上的一条边为$e$,边权和变化量为$W_e$和$deta_e$,与这条边构成环的非树边为$e'$ 那么肯定有$W_e-deta_e\leq W_{e'}+deta_{e'}$ 移项以后是$W_e-W_{e'}\leq 阅读全文
摘要:
题面传送门 考试的时候想了2h写了个假做法意识到错以后20min切掉我是sb 首先这个东西肯定是一个图论问题,然后发现如果边$(x,y)$表示$x$爆了$y$跟着爆那么缩点以后答案就是这个点拓扑下去的点个数。 然后前面这个线段树优化建图就好了。 一个点拓扑下去的个数显然可以bitset但是不是我们想 阅读全文
摘要:
题面传送门 首先显然有一个三只log的做法,就是先二分,然后点分找大于这个值的路径,直接爆炸。 考虑有什么更优的方法,我们将点分治的顺序跑出来,然后发现一个点计算答案的区间一定是一段区间。 然后我们像超级钢琴那样就好了。 区间最大值的话如果是线段树是$O(n+m)logn$,st表是$O(nlog^ 阅读全文
摘要:
题面传送门 我再不判图联通我是sb! 我们可以先跑出这个图的一个生成森林,然后在生成森林上跑。 如果两个环叠在一起那么肯定是有解的,就是两个环的交集的两个端点。 所以我们让每条非树边往上打标记,碰到标记说明有环重叠。 然后把两个环拿出来处理一下就好了。 时间复杂度$O(n)$ code: #incl 阅读全文
摘要:
题面传送门 太神了。这道题。 考虑先两次拓扑找到$d1$为起点到这个点的最长路,$d2$为这个点开始的最长路。 然后按照拓扑序操作点。 如果我们将操作过的点设为$A$集合,没有操作过的点设为$B$集合,那么最长路只可能是以下三种: A集合内部,B集合内部,A集合到B集合。 前面两个很好维护,第三个在 阅读全文
摘要:
题面传送门 首先肯定要找到任意一个在所有形态树中都一样的点,那么肯定找到重心。 然后找到中心以后设$dp_{i,j}$为$i$与$j$子树的最小答案。 然后对于这两个点的子树KM一下就可以得到答案了再加上自己。 时间复杂度$O(11n^2)$ code: #include<bits/stdc++.h 阅读全文
摘要:
题面传送门 这个一眼分数规划然后转化成树上长度在$[L,R]$之间的最长路径问题。 这个东西可以长链剖分解决,就是像重链剖分一样用线段树维护,然后轻儿子暴力查找和加入即可。 注意不要忘了一条链的情况。 时间复杂度$O(nlognlogw)$ code: #include<bits/stdc++.h> 阅读全文
摘要:
A 刚开始其实并不会然后看了看样例发现自己会了。 大概就是把最大的拿出来然后剩下的放一起,正确性易证。 code: using namespace std; int T,n,x;ll Maxn,ToT; int main(){ scanf("%d",&T);while(T--){ scanf("%d 阅读全文
摘要:
题面传送门 这道题形象地给我们展示了DAG下支配树地求法。 我们建立一棵树,每个点$u$的父亲$fa_u$表示如果$fa_u$灭绝了,$u$一定灭绝。容易发现答案就是子树节点个数-1 考虑这个东西怎么求。 我们从入度为$0$的点出发,对于一个点,它的父亲是在DAG上所有儿子在支配树上lca,因为只有 阅读全文