随笔分类 -  树形结构

摘要:这道题其实很简单,求k个到根的链,使得链上的节点的个数尽可能多,如果节点被计算过了,就不能再被计算了,其实我们发现,只要k>=叶子节点,那么肯定是全部,所以我们考虑所有的叶子节点,DFS到根节点后,往上递归,我们能比较容易的求出某个节点,所有儿子节点的最深深度,那么对于上面一个节点,其实只有一个最长 阅读全文
posted @ 2019-10-08 11:05 bluefly-hrbust 阅读(461) 评论(0) 推荐(0)
摘要:DFS找到节点删除的时间,删除的时间其实就是子树的最长链,然后给每个点打一个时间戳,然后求每个时间点对应删除的节点的个数,对于1-max_time时间戳求一个前缀和,然后二分找到和m距离最近的那一天 阅读全文
posted @ 2019-09-28 02:12 bluefly-hrbust 阅读(210) 评论(1) 推荐(0)
摘要:#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[ 阅读全文
posted @ 2019-08-31 21:49 bluefly-hrbust 阅读(282) 评论(0) 推荐(0)
摘要:定义:笛卡尔树是一种特定的二叉树数据结构,可由数列构造,在范围最值查询、范围top k查询(range top k queries)等问题上有广泛应用。它具有堆的有序性,中序遍历可以输出原数列 总的来说就是,二叉查找树+堆 给定下列序列,那么构造出来的就是如图的东西。 你可以发现一个有趣的性质,RM 阅读全文
posted @ 2019-07-26 23:01 bluefly-hrbust 阅读(266) 评论(0) 推荐(0)
摘要:赛后和队友讨论了一波,感谢无敌的队友给我细心的讲题 先埋坑 阅读全文
posted @ 2018-09-11 00:22 bluefly-hrbust 阅读(151) 评论(0) 推荐(0)
摘要:这题最开始给你了N个点,M条边,边是单向边,问不指定起点和终点,最长路是什么??? 脑补一下,不定起点和终点的最短路,用弗洛伊德算法搞一搞,但是。。。那个垃圾算法的复杂度是N^3的,但是这个算法的M高达5000,直接放弃 仔细想想,可以用剪纸+dijstra做,但是需要改变一下边权,distra求的 阅读全文
posted @ 2018-09-08 10:35 bluefly-hrbust 阅读(274) 评论(0) 推荐(0)
摘要:二维树状数组真的还挺神奇的,更新也很神奇,比如我要更新一个区域内的和,我们的更新操作是这样的 add(x1,y1,z); add(x2+1,y2+1,z); add(x1,y2+1,-z); add(x2+1,y1,-z); 我们会想为什么和一维的差这么多,我们不妨这样看 add(x1,y1,z); 阅读全文
posted @ 2018-09-02 11:03 bluefly-hrbust 阅读(231) 评论(0) 推荐(0)