随笔分类 - 树形结构
摘要:这道题其实很简单,求k个到根的链,使得链上的节点的个数尽可能多,如果节点被计算过了,就不能再被计算了,其实我们发现,只要k>=叶子节点,那么肯定是全部,所以我们考虑所有的叶子节点,DFS到根节点后,往上递归,我们能比较容易的求出某个节点,所有儿子节点的最深深度,那么对于上面一个节点,其实只有一个最长
阅读全文
摘要:DFS找到节点删除的时间,删除的时间其实就是子树的最长链,然后给每个点打一个时间戳,然后求每个时间点对应删除的节点的个数,对于1-max_time时间戳求一个前缀和,然后二分找到和m距离最近的那一天
阅读全文
摘要:#include<bits/stdc++.h> #define LL long long #define pii pair<int,int> #define mp make_pair using namespace std; const int maxx = 2e5+6; const double alpha = 0.75; struct node{ int l,ml,mr,r; int val[
阅读全文
摘要:定义:笛卡尔树是一种特定的二叉树数据结构,可由数列构造,在范围最值查询、范围top k查询(range top k queries)等问题上有广泛应用。它具有堆的有序性,中序遍历可以输出原数列 总的来说就是,二叉查找树+堆 给定下列序列,那么构造出来的就是如图的东西。 你可以发现一个有趣的性质,RM
阅读全文
摘要:赛后和队友讨论了一波,感谢无敌的队友给我细心的讲题 先埋坑
阅读全文
摘要:这题最开始给你了N个点,M条边,边是单向边,问不指定起点和终点,最长路是什么??? 脑补一下,不定起点和终点的最短路,用弗洛伊德算法搞一搞,但是。。。那个垃圾算法的复杂度是N^3的,但是这个算法的M高达5000,直接放弃 仔细想想,可以用剪纸+dijstra做,但是需要改变一下边权,distra求的
阅读全文
摘要:二维树状数组真的还挺神奇的,更新也很神奇,比如我要更新一个区域内的和,我们的更新操作是这样的 add(x1,y1,z); add(x2+1,y2+1,z); add(x1,y2+1,-z); add(x2+1,y1,-z); 我们会想为什么和一维的差这么多,我们不妨这样看 add(x1,y1,z);
阅读全文

浙公网安备 33010602011771号