bzoj3589 动态树 树链剖分+容斥】的更多相关文章

题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=3589 题解 事件 \(0\) 不需要说,直接做就可以了. 事件 \(1\) 的话,考虑如果直接查询然后相加的话,会有很多段被算重了.于是考虑容斥,把算重的段给减掉就可以了.至于如何计算每一段的答案,直接树剖吧. 时间复杂度 \(O(q\log^2n)\). #include<bits/stdc++.h> #define fec(i, x, y) (int i = head[x], y =…
bzoj3589 动态树 链接 bzoj 思路 求链并. 发现只有最多5条链子,可以容斥. 链交求法:链顶是两条链顶深度大的那个,链底是两个链底的\(lca\) 如果链底深度小于链顶,就说明两条链没有交集. 复杂度\(m*2^klog^2n\) 还有一种做法. 把所有链子都打上\(0/1tag\),只有\(1\)才能有贡献. 应该挺麻烦的,或者说都挺好写的. 代码 #include <bits/stdc++.h> using namespace std; const int _=4e5+7;…
因为一开始调试不知道unsigned怎么输出就没有加\n结果WA了一上午!!!!!然而最后放弃了unsigned选择了&2147483647 首先链剖,因为它所给的链一定是某个点到根的路径上的一段(一开始没看到),也就是说链是不会拐弯的,那么考虑容斥,加上每条链的长度减去两条链的交的长度加上三条链的交的长度... 关于求链的交,因为链不会拐弯,所以对于两条链上深度较深的两个点\( (v_1,v_2) \)求\( lca \),如果\( lca \)的深度小于两条链的较浅点的任意一个,那么这两条链…
跟仙人掌其实没啥关系- Here 注意 每一次都O(n)O(n)O(n)一下算某些点都是黑点的概率其实并不是O(n2)O(n^2)O(n2),因为每个环只用算一次. #include <cctype> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; typedef long long LL; const int MAXN = 100005; cons…
题意: 给你一个有n个点的树,给定根,叫你找第k大的特殊链 .特殊的链的定义:u,v之间的路径,经过题给的根节点. 题解:(来自BC官方题解) 对于求第k大的问题,我们可以通过在外层套一个二分,将其转化为求不小于mid的有多少个的问题. 接下来我们讨论如何求树上有多少条折链的长度不小于k. 我们考虑常规的点分治(对于重心,求出其到其他点的距离,排序+单调队列),时间复杂度为O(nlog^2n),但是这只能求出普通链的数量. 我们考虑将不属于折链的链容斥掉.也即,我们需要求出有多少条长度不小于mi…
hdu 5792 要找的无非就是一个上升的仅有两个的序列和一个下降的仅有两个的序列,按照容斥的思想,肯定就是所有的上升的乘以所有的下降的,然后再减去重复的情况. 先用树状数组求出lx[i](在第 i 个数左边的数中比它小的数的个数),ld[i](在第 i 个数左边的数中比它大的数的个数),rx[i](在第 i 个数右边的数中比它小的数的个数) ,rd[i](在第 i 个数右边的数中比它大的数的个数).然后重复的情况无非就是题目中a与c重合(rx[i]*rd[i]),a与d重合(rd[i]*ld[…
传送门 设$f_i$表示$i$排列的数量,其中$x$表示不确定 那么$$ans=f_{1324}-f_{1432}-f_{1243}=(f_{1x2x}-f_{1423})-(f_{14xx}-f_{1423})-(f_{12xx}-f_{1234})$$ $$=f_{1x2x}-(f_{14xx}+f_{12xx})+f_{1234}$$ $$=f_{1x2x}-f_{1xxx}+f_{13xx}+f_{1234}$$ ①$f_{1xxx}$用树状数组求正序对 ②$f_{1234}$四个树状数…
傻逼线段树,傻逼数剖 线段树 定义: 线段树是一种二叉搜索树,与区间树相似,它将一个区间划分成一些单元区间,每个单元区间对应线段树中的一个叶结点. 使用线段树可以快速的查找某一个节点在若干条线段中出现的次数,时间复杂度为O(logN).而未优化的空间复杂度为2N,实际应用时一般还要开4N的数组以免越界,因此有时需要离散化让空间压缩. 有什么用? 线段树功能强大,支持区间求和,区间最大值,区间修改,单点修改等操作.线段树的思想和分治思想很相像.线段树的每一个节点都储存着一段区间[L-R]的信息,其…
World is Exploding Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 727    Accepted Submission(s): 348 Problem Description Given a sequence A with length n,count how many quadruple (a,b,c,d) sati…
题目链接: [JOI 2019 Final]独特的城市 对于每个点,它的答案最大就是与它距离最远的点的距离. 而如果与它距离为$x$的点有大于等于两个,那么与它距离小于等于$x$的点都不会被计入答案. 所以我们需要找到对于每个点$u$距离它最远的点及最小的距离$x$满足距离$u$的距离大于等于$x$的点都只有一个. 那么怎么找距离每个点最远的点? 这个点自然就是树的直径的一个端点了! 我们将树的直径先找到,然后讨论一下对于每个点,有哪些点可能会被计入答案: 如图所示,我们以点$x$为例,假设它距…