把博客园图标替换成自己的图标
把博客园图标替换成自己的图标end

08 2021 档案

摘要:题面传送门 首先是牛顿迭代。 举个例子,你要求x2a=0并且你不会解一元二次方程。 然后你先找到一个x0算出x=x0的当前值。 然后求当前点x0的切线,大概是y=f(x0)(xx0)+f(x0) 带入y=0就可以解得$x=x_0+\frac{f(x_0)} 阅读全文
posted @ 2021-08-30 20:16 275307894a 阅读(91) 评论(0) 推荐(0) 编辑
摘要:题面传送门 zj:这种屑题最多评个蓝 首先判一下无解,然后将同样的缩成一个点。 然后设fi为最后有i个联通块的答案,所以最后答案容斥一下就好了。 这个东西分治的时候NTT合并答案就好了。 有亿点卡常,时间复杂度O(nlog2n) code: #include<bits/stdc++. 阅读全文
posted @ 2021-08-25 12:54 275307894a 阅读(61) 评论(0) 推荐(0) 编辑
摘要:题面传送门 n这么小就很诡异。 考虑设阈值B 如果当前的Pi>B那么直接暴力建边就好了,这时候的边数是O(nB)的。 如果当前的Pi<B那么放到一起处理,发现如果P是相同的,那么位置modp相同的全部位置只要在左右之间建边就好了,其它边是可以迭代进 阅读全文
posted @ 2021-08-24 15:01 275307894a 阅读(32) 评论(0) 推荐(0) 编辑
摘要:题面传送门 指导居然卡空间差评!!!! 首先肯定可以暴力建图然后跑费用流,每次增加一个流量,这样可以O(n2m) 然后发现如果一行是一个连续没有障碍段那么肯定走到最后再换行一定不会更劣。 所以可以这样缩点,并把每个点拆成出点和入点限流,然后对于每个障碍点连出m条边即可。 时间复杂度$O(n2 阅读全文
posted @ 2021-08-24 14:53 275307894a 阅读(45) 评论(0) 推荐(0) 编辑
摘要:题面传送门 n这么大肯定只能矩乘(暴论 但是不能出现这个串的限制很难搞,考虑设dpi,j表示第i位然后匹配到答案第j位。 然后如果预处理出kmp就可以O(10nm)搞了。 把这个递推改成矩乘就可以O(m3logn)轻松跑过。 code: #include<bits/s 阅读全文
posted @ 2021-08-24 14:49 275307894a 阅读(37) 评论(0) 推荐(0) 编辑
摘要:题面传送门 这个题很屑啊强行套两个题上去。 首先肯定要从高到低枚举位然后看这一位是否可以为1 然后问题转化为判定能否分成i,i[A,B]段,且或的值是一个给定数的子集,这个东西可以O(n3)的dp解决掉。 具体的,设fi,j为分了j段,到了第i个数的方案数,转移的 阅读全文
posted @ 2021-08-23 10:00 275307894a 阅读(33) 评论(0) 推荐(0) 编辑
摘要:题面传送门 一眼线段树分治然而想想都会T 考虑什么更优的算法。 我们用线段树维护权值大于w的树上路径交,然后线段树上二分,看看树上路径交是否包含这个点即可。 时间复杂度O(nlogn),需要使用O(1)LCA code: #include<bits/stdc++.h> #define I 阅读全文
posted @ 2021-08-18 20:03 275307894a 阅读(37) 评论(0) 推荐(0) 编辑
摘要:题面传送门 首先这个在树上的边肯定只是变小,不在树上的边肯定只是增大。 我们设在树上的一条边为e,边权和变化量为Wedetae,与这条边构成环的非树边为e 那么肯定有WedetaeWe+detae 移项以后是$W_e-W_{e'}\leq 阅读全文
posted @ 2021-08-17 18:18 275307894a 阅读(39) 评论(0) 推荐(0) 编辑
摘要:题面传送门 考试的时候想了2h写了个假做法意识到错以后20min切掉我是sb 首先这个东西肯定是一个图论问题,然后发现如果边(x,y)表示x爆了y跟着爆那么缩点以后答案就是这个点拓扑下去的点个数。 然后前面这个线段树优化建图就好了。 一个点拓扑下去的个数显然可以bitset但是不是我们想 阅读全文
posted @ 2021-08-17 18:10 275307894a 阅读(36) 评论(0) 推荐(0) 编辑
摘要:题面传送门 首先显然有一个三只log的做法,就是先二分,然后点分找大于这个值的路径,直接爆炸。 考虑有什么更优的方法,我们将点分治的顺序跑出来,然后发现一个点计算答案的区间一定是一段区间。 然后我们像超级钢琴那样就好了。 区间最大值的话如果是线段树是O(n+m)logn,st表是$O(nlog^ 阅读全文
posted @ 2021-08-17 18:00 275307894a 阅读(43) 评论(0) 推荐(0) 编辑
摘要:题面传送门 我再不判图联通我是sb! 我们可以先跑出这个图的一个生成森林,然后在生成森林上跑。 如果两个环叠在一起那么肯定是有解的,就是两个环的交集的两个端点。 所以我们让每条非树边往上打标记,碰到标记说明有环重叠。 然后把两个环拿出来处理一下就好了。 时间复杂度O(n) code: #incl 阅读全文
posted @ 2021-08-15 14:53 275307894a 阅读(29) 评论(0) 推荐(0) 编辑
摘要:题面传送门 太神了。这道题。 考虑先两次拓扑找到d1为起点到这个点的最长路,d2为这个点开始的最长路。 然后按照拓扑序操作点。 如果我们将操作过的点设为A集合,没有操作过的点设为B集合,那么最长路只可能是以下三种: A集合内部,B集合内部,A集合到B集合。 前面两个很好维护,第三个在 阅读全文
posted @ 2021-08-15 14:49 275307894a 阅读(36) 评论(0) 推荐(0) 编辑
摘要:题面传送门 首先肯定要找到任意一个在所有形态树中都一样的点,那么肯定找到重心。 然后找到中心以后设dpi,jij子树的最小答案。 然后对于这两个点的子树KM一下就可以得到答案了再加上自己。 时间复杂度O(11n2) code: #include<bits/stdc++.h 阅读全文
posted @ 2021-08-14 08:24 275307894a 阅读(42) 评论(0) 推荐(0) 编辑
摘要:题面传送门 这个一眼分数规划然后转化成树上长度在[L,R]之间的最长路径问题。 这个东西可以长链剖分解决,就是像重链剖分一样用线段树维护,然后轻儿子暴力查找和加入即可。 注意不要忘了一条链的情况。 时间复杂度O(nlognlogw) code: #include<bits/stdc++.h> 阅读全文
posted @ 2021-08-10 22:23 275307894a 阅读(36) 评论(0) 推荐(0) 编辑
摘要:A 刚开始其实并不会然后看了看样例发现自己会了。 大概就是把最大的拿出来然后剩下的放一起,正确性易证。 code: using namespace std; int T,n,x;ll Maxn,ToT; int main(){ scanf("%d",&T);while(T--){ scanf("%d 阅读全文
posted @ 2021-08-10 20:48 275307894a 阅读(45) 评论(0) 推荐(0) 编辑
摘要:题面传送门 这道题形象地给我们展示了DAG下支配树地求法。 我们建立一棵树,每个点u的父亲fau表示如果fau灭绝了,u一定灭绝。容易发现答案就是子树节点个数-1 考虑这个东西怎么求。 我们从入度为0的点出发,对于一个点,它的父亲是在DAG上所有儿子在支配树上lca,因为只有 阅读全文
posted @ 2021-08-10 00:56 275307894a 阅读(27) 评论(0) 推荐(0) 编辑
摘要:题面传送门 首先设dpi,ji个点的树高度为j的方案数,这个很好O(n3)做。 然后发现因为树很平衡,所以树高大概是O(logn)级别的,然后就O(n2logn)可以过了。 但是还有更优的方法。 我们设Upi为高度为i的树的最小点数,Downi表示高度 阅读全文
posted @ 2021-08-09 21:55 275307894a 阅读(57) 评论(0) 推荐(0) 编辑
摘要:题面传送门 首先把这颗树转化成最小的括号序。 然后有一个神奇的结论:如果两棵有根树的最小括号序相同,那么他们同构。 仔细想想其实是这么回事,这个东西使树的形态确定。 然后对于无根树我们找到它的重心做根就好了 时间复杂度O(mn2) code: #include<bits/stdc++.h> # 阅读全文
posted @ 2021-08-08 19:41 275307894a 阅读(46) 评论(0) 推荐(0) 编辑
摘要:题面传送门 这个东西肯定是有一个中转点满足到三个点距离相同。 我们设fi,ji子树内的距离ij的点的个数,gi,ji子树内无序对(x,y)满足dist(x,lca(x,y))=dist(y,lca(x,y))=dist(i,lca(x,y))+j阅读全文
posted @ 2021-08-08 14:30 275307894a 阅读(34) 评论(0) 推荐(0) 编辑
摘要:题面传送门 考虑长链剖分。我们对于每个链顶存下这条链上的点和往上len长度个点。 然后倍增预处理出一个点往上2i祖先。 对于一个点的kk级祖先,我们让他先跳2logk级祖先,此时这个点所在的长链一定大于等于$2^{\lfloor logk\rf 阅读全文
posted @ 2021-08-08 09:15 275307894a 阅读(34) 评论(0) 推荐(0) 编辑
摘要:题面传送门 发现自己不会斯特林反演于是去学习了一下。 大概就是mn=i=0mCminii! 感性理解一下就是mn是把n个球放到m个不同的盒子里。所以枚举非空的盒子然后斯特林数最后因为斯特林数无序所以乘以j!即可。 然后这道 阅读全文
posted @ 2021-08-06 22:17 275307894a 阅读(29) 评论(0) 推荐(0) 编辑
摘要:题面传送门 就这?就这?建议评蓝。 首先这个东西肯定是所有点的出现期望加起来。 考虑单个点怎么算,那么就是所有儿子的子树内不出现概率乘个边权乘起来最后用1减掉就好了。 那多个点不就换个根就好了。 时间复杂度O(n) code: #include<bits/stdc++.h> #define I 阅读全文
posted @ 2021-08-06 20:46 275307894a 阅读(26) 评论(0) 推荐(0) 编辑
摘要:题面传送门 似乎是很平凡的idea了啊,而且这道题也不卡常啊。 容易想到一个暴力dp,就是设dpi,jk表示i点,有了j的状态,当前点为k的方案数,这样子是枚举子集要O(n33n)的过不掉。 然后接下来这个idea大概出自[SHOI2016]黑暗前的幻想乡(也不能说出自因 阅读全文
posted @ 2021-08-05 22:34 275307894a 阅读(33) 评论(0) 推荐(0) 编辑
摘要:题面传送门 不得不说这个正解是真的暴力本来还想写可持久化平衡树的( 考虑我们将每个新加入的树看作一个点。 那么我们要支持这些操作: 查询一个点在那个树里面,这个直接lowerbound就好了。 查询一颗树内某个点在原树哪个节点,这个直接把原树的dfs序拍了然后主席树区间k大就好了。 查询现在树上 阅读全文
posted @ 2021-08-05 21:45 275307894a 阅读(35) 评论(0) 推荐(0) 编辑
摘要:题面传送门 发现自己写了个屑的O(nnlogn)做法。 首先这种走k步的东西想到根号分治。 设阈值B,若C>B的话那么就暴力跳,时间复杂度O(nlogn)CB的话那么对于每个C一起处理,每次做一遍倍增就好了。这个单次倍增时间复杂度$O 阅读全文
posted @ 2021-08-04 22:05 275307894a 阅读(52) 评论(0) 推荐(0) 编辑
摘要:题面传送门 看到这种东西想到差分,即差分成[1,r]\(\)[1,l]的答案。 距离的式子其实是distu+distv2distlca(u,v)前面两项平凡所以要求distlca(u,v) 然后这个有经典套路就是每个点往根加和查就是这个式子,直接树剖就好了。 因为 阅读全文
posted @ 2021-08-03 22:49 275307894a 阅读(48) 评论(0) 推荐(0) 编辑
摘要:1003 手玩一下发现如果是一维的只能有两个,二维的只能有三个。 所以得出结论,一维能分开一个。 code: int T;ll n,k; int main(){ scanf("%d",&T);while(T--) scanf("%lld%lld",&n,&k),puts(n<=k+1?"Yes":" 阅读全文
posted @ 2021-08-03 21:22 275307894a 阅读(314) 评论(0) 推荐(0) 编辑
该文被密码保护。
posted @ 2021-08-02 22:49 275307894a 阅读(0) 评论(0) 推荐(0) 编辑

浏览器标题切换
浏览器标题切换end
点击右上角即可分享
微信分享提示