把博客园图标替换成自己的图标
把博客园图标替换成自己的图标end
摘要: 题面传送门 这道题目蛮好的。 首先暴力不可取,会$T$ 考虑分类讨论,把一段路径分为上行与下行。 设$d_x$为$x$节点的深度,则在上行时被观察到当且仅当$d_v+t_v=d_u$,下行也可推出当且仅当$d_v-t_v=d_u$ 那么直接在树上差分哪一段有贡献。 求答案就是在子树内找与那个数相同的 阅读全文
posted @ 2020-06-25 22:15 275307894a 阅读(41) 评论(0) 推荐(0) 编辑
摘要: 题面传送门 看到树,想到树剖。 然而线段树维护不了这么高次项的数啊。 再转眼一看,\(k\leq 50\) 那不就可以直接前缀和了吗? 这道题在省选时极其卡时限,所以可以先预处理出深度的$k$次方。然后直接树上前缀和即可。 代码实现: #include<cstdio> #include<cstrin 阅读全文
posted @ 2020-06-25 22:10 275307894a 阅读(45) 评论(0) 推荐(0) 编辑
摘要: 题面传送门 只有一次查询,想到差分。 那么我们怎么把差分运用到树上呢? 自然要在$lca$上下文章了。 可是不能直接在$lca$上下,得在$fa_$上下,即$f_u++,f_v++,f_{lca(x,y)}--,f_{fa_{lca(x,y)}}--$ 注意不是每个点都出现,我因为这个调了一天。 代 阅读全文
posted @ 2020-06-24 20:21 275307894a 阅读(36) 评论(0) 推荐(0) 编辑
摘要: 题面传送门 其实这道弱省省选还蛮简单的。 稍微思考一下我们就可以得出一个结论:集合点肯定在三个点中某两个点的$lca$上。 因为无论这个点朝哪个方向移都是靠近一个点远离两个点肯定不会更优。 所以我们可以先跑出三个点的$lca$然后再分别算答案输出。 但是这样要跑$6$遍$lca$,在$qzezoj$ 阅读全文
posted @ 2020-06-24 20:18 275307894a 阅读(43) 评论(0) 推荐(0) 编辑
摘要: 题面传送门 这道题是树剖模板。 树剖第一步:\(dfs1\),找出每个点子树大小,父亲节点,重儿子,深度。 第二步:\(dfs2\),找出每个点编号,把原来的权值赋值过来,先标重儿子再标轻儿子,标记每个链顶。 这里最大的点最多只有$logn$条链。 因为每更换一条链都要一个轻链,而点数会除以$2$ 阅读全文
posted @ 2020-06-21 16:12 275307894a 阅读(57) 评论(0) 推荐(0) 编辑
摘要: 题面传送门 这道题很明显是要我们求强连通分量。我们可以用$Tarjan$求。 对于$Tarjan$的求法,是这样做的: 记录第几个访问到:用一个$dfn$数组。 记录这个点的子树能访问到的最早访问到的点,为$low$。 记录一个栈,表示没有弹出的点。 记录$vis$,表示是否在栈里。 对于每个点,从 阅读全文
posted @ 2020-06-21 16:01 275307894a 阅读(50) 评论(0) 推荐(0) 编辑
摘要: 题面传送门 感觉这道紫题质量还是可以的。 我们先跑一遍$Tarjan$求出图的割点,然后根据割点将图割开。对于每个连通块,分类讨论: 如果没有接触到割点,那么要设两个点,因为要考虑原来那个塌了的情况。方案数乘上$C^{2}_$ 如果只有一个割点,那么为了防止割点崩塌,得设一个,方案数乘上$n$ 如果 阅读全文
posted @ 2020-06-20 20:01 275307894a 阅读(42) 评论(0) 推荐(0) 编辑
摘要: 题面传送门 这是一道主席树的模板题。 很遗憾,被我卡掉了 lxl 显然这么小的空间主席树是肯定过不去的,空间复杂度$O(4nlogn)$,开满约$110M$,只有$80$分。 考虑优化。 我们的主席树的划分是这么写的 m=(l+r)>>1 之所以要开四倍空间,是因为会有这样的东西所以不能用主席树。 阅读全文
posted @ 2020-06-16 18:34 275307894a 阅读(94) 评论(0) 推荐(0) 编辑
摘要: 题面传送门 明显势能线段树。 这里证明一下取模的下界。 对于一个数$x$,若取模的数$y>\frac{2}$,那么$x%y=x-y<\frac{2}$,若取模的数$y<\frac{2}$,那么$x%y<y<\frac{2}$,则一个数至多取模$logn$次就会为$1$。 修改至多会增加$logn$次 阅读全文
posted @ 2020-06-13 19:59 275307894a 阅读(59) 评论(0) 推荐(0) 编辑
摘要: 题面传送门 一眼就是势能线段树的模板题。 关于欧拉函数的上界我不会证,这里证一个复杂度下界。 对于每一个数$x$,其最大的约数最大是$\frac{2}\(,故对于每一个\)\frac{2}<y<x$都必定不是$x$的约数,所以复杂度下界$logn$,总复杂度$nlogn$ 代码实现: #includ 阅读全文
posted @ 2020-06-09 18:39 275307894a 阅读(51) 评论(0) 推荐(0) 编辑
摘要: 题面传送门 明显是换根$dp$,转移时讨论一下就好了。 代码实现: #include<cstdio> #include<cstring> #define max(a,b) ((a)>(b)?(a):(b)) using namespace std; int n,m,k,head,h[1000039] 阅读全文
posted @ 2020-06-06 21:52 275307894a 阅读(31) 评论(0) 推荐(0) 编辑
摘要: \(tg\): 开场感觉$pj$的第一题出到$tg$来了(滚粗$flag+1$)然后用前缀和水水就过了。第二题感觉像是矩乘板子,推了一下确实满足交换律,然后就打了一个矩阵快速幂(滚粗$flag+2$),感觉复杂度$O(qn^3logn)$很不可行,于是写了一些常数优化,最后也没卡进$1s$。第三题匆 阅读全文
posted @ 2020-06-06 21:50 275307894a 阅读(45) 评论(0) 推荐(0) 编辑
摘要: 题面传送门 显然可以$dp$ $n^2$暴力$dp$很好想,循环时直接更新答案即可。 考虑优化。 显然,如果每$1$头牛都分成$1$组,那么代价为$n$,所以我们每次枚举状态时种类不能超过$\sqrt n$,否则为无用转移。 那$\sqrt n$种类数之内的最左端点怎么搞呢? 显然可以尺取法。跑$\ 阅读全文
posted @ 2020-05-30 21:41 275307894a 阅读(39) 评论(0) 推荐(0) 编辑
摘要: 题面传送门 一眼看上去就是矩乘套路题。 又因为异或满足交换律与结合律,所以确定可以矩乘。 但是对于每个询问直接矩乘显然复杂度$O(qn3logn)$会$T$ 因为是$01$矩乘,又因为询问只问了$1$号点,所以可以拿原来$1$的向量乘以预处理的矩阵,复杂度降为$O(n3logn)-O(qn^2log 阅读全文
posted @ 2020-05-30 21:29 275307894a 阅读(66) 评论(0) 推荐(0) 编辑
摘要: 题面传送门 来一发不用单调队列的解法。 循环还是单调队列的循环,只不过把单调队列换成一个变量记录有几个$1$,循环时加减一下就好了。时间复杂度$O(nm)$ 代码实现: #include<cstdio> #define max(a,b) ((a)>(b)?(a):(b)) #define min(a 阅读全文
posted @ 2020-05-26 20:05 275307894a 阅读(79) 评论(0) 推荐(0) 编辑
摘要: 题面传送门 直接$bfs$即可。 代码实现: #include<cstdio> #include<queue> #define max(a,b) ((a)>(b)?(a):(b)) using namespace std; int a[1539][1539],x,y,n,m,k,ans,tot,pu 阅读全文
posted @ 2020-05-26 20:00 275307894a 阅读(130) 评论(0) 推荐(0) 编辑
摘要: 题面传送门 没啥好说的,模拟即可。 #include<cstdio> #include<iostream> #include<cstring> #define max(a,b) ((a)>(b)?(a):(b)) using namespace std; int n,m,k,ans,tot,pus, 阅读全文
posted @ 2020-05-26 19:37 275307894a 阅读(111) 评论(0) 推荐(0) 编辑
摘要: 题面传送门 显然是全部把$k$个倒到一个水壶中最优。 那么我们可以前缀和。枚举右端点,利用前缀和算左端点。 #include<cstdio> #define max(a,b) ((a)>(b)?(a):(b)) using namespace std; int n,m,k,a[1000039],q[ 阅读全文
posted @ 2020-05-24 16:24 275307894a 阅读(77) 评论(0) 推荐(0) 编辑
摘要: 题面传送门 显然可以$dp$ 第一次$dfs$,定义$f_{i,j}$为在$i$子树下距离在$j$以内的总和。 第二次可以容斥,用父亲节点的减去儿子节点的值。 代码实现: #include<cstdio> #include<cstring> using namespace std; int n,m, 阅读全文
posted @ 2020-05-23 21:50 275307894a 阅读(41) 评论(0) 推荐(0) 编辑
摘要: 题面传送门 看着像线段树。 直接二进制拆掉就可以取反操作了。 拆掉以后就是异或$1$或者$0$的操作了。 时间复杂度$O(26nlogn)$ 代码实现: #include<cstdio> using namespace std; int n,m,k,x,y,zs,head,a[100039],f1[ 阅读全文
posted @ 2020-05-15 19:53 275307894a 阅读(52) 评论(0) 推荐(0) 编辑
摘要: 题面传送门 明显可以尺取法。 先把每一位取反,则枚举右端点,左端点单调不降则直接暴力枚举即可。 代码实现: #include<cstdio> #define max(a,b) ((a)>(b)?(a):(b)) using namespace std; int n,m,k,a[300039],q[3 阅读全文
posted @ 2020-05-12 20:39 275307894a 阅读(41) 评论(0) 推荐(0) 编辑
摘要: 题面传送门 第二道$Ynoi$题目。感觉还是很良心的。 区间相同个数,很容易想到$bitset$。 然后可以用莫队维护出来,最后与一下就好了。 但是相同的数怎么办呢? 离散的时候把位置空出来,之后维护一下有几个就好了。 注意加一些常数优化之类的。 代码实现: #include<cstdio> #in 阅读全文
posted @ 2020-05-10 15:17 275307894a 阅读(41) 评论(0) 推荐(0) 编辑
摘要: 看来别的博客都没有讲清楚,那我就来讲一下。 一下纯属作者个人思路,若有不对请提出。 在这篇文章中,$/$表示向下取整的除。 求$ax+by=c$的解 显然是不定方程。有无解我们可以用裴蜀定理验证,此处当做其有解。 我们可以尝试用$y$表示出$x$,比如这样:\(x=\frac{c-by}{a}\) 阅读全文
posted @ 2020-05-08 20:01 275307894a 阅读(47) 评论(0) 推荐(0) 编辑
摘要: 题面传送门 启发式合并大法吼啊。 优雅的暴力。 暴力:遍历整个数组去修改,时间复杂度$O(n2)$ 换一个思路暴力:对于每一个$a_i$维护一个队列,每次把两个队列合并。时间复杂度仍是$O(n2)$ 那可不可以优化一下呢? 每次我们不能把小的合并到大的上面去吗,这样可以减少点常数。 等等,你确定是常 阅读全文
posted @ 2020-05-02 21:52 275307894a 阅读(36) 评论(0) 推荐(0) 编辑
摘要: 这次题目很简单,但仍然改变不了我没法阿克的命运(还是菜 开题开错顺序(滚粗$flag+1$),把第二题做成了第一题,心想着这次比上次良心于是怀着一种切sb题的思路把$T2$给切掉了,然后发现看错题面,之后觉得题面对了以后更$sb$了,不就是个线段树维护元素平方和吗,写了十分钟,挂上了一个莫队写的对拍 阅读全文
posted @ 2020-04-25 16:17 275307894a 阅读(60) 评论(0) 推荐(0) 编辑
浏览器标题切换
浏览器标题切换end