随笔分类 -  数据结构===============

摘要:题目:https://www.luogu.org/problemnew/show/P3721 手玩一下即可AC此题。 结论:插入x后,x要么会成为x的前驱的右儿子,要么成为x的后继的左儿子,这取决于它的前驱和后继的深度。 证明:首先可以证明的是,x的前驱和后继一定存在祖先与后代的关系,因为如果不存在 阅读全文
posted @ 2019-02-06 21:16 Creed-qwq 阅读(221) 评论(0) 推荐(0)
该文被密码保护。
posted @ 2019-02-05 15:10 Creed-qwq 阅读(6) 评论(0) 推荐(0)
摘要:考虑最大流=最小割 不妨把a到a的边称为a类边,b到b的称为b类边,a到b的称为c类边。 显然,答案一定是由最多1条a和最多一条b以及一些c组成的。 只有a是会变的,也就是说每个a对应了唯一的最优的b和c。 因此可以先求一下每个a对应的最优的b和c。 分析一下可得,a,b确定后,c应该是所有满足xb 阅读全文
posted @ 2019-01-26 13:58 Creed-qwq 阅读(234) 评论(0) 推荐(0)
摘要:首先,有一个很暴力的nk的做法,就是对每种颜色分别开棵lct来维护。 实际上,有复杂度与k无关的做法。 感觉和bzoj4025二分图那个题的区别就在于这个题是边dfs线段树边拆分区间。 阅读全文
posted @ 2019-01-20 13:15 Creed-qwq 阅读(375) 评论(0) 推荐(0)
摘要:这里的并查集是按秩合并并查集。 这种方法维护生成树的时候可以维护一个点到根的权值。 但是由于合并的时候做了一个类似换根一样的操作,因此这个权值通常只能是异或之类的。 //find-union-set int top,f[N],v[N],sz[N],sk[M]; int find(int x){ret 阅读全文
posted @ 2019-01-20 12:06 Creed-qwq 阅读(168) 评论(0) 推荐(0)
摘要:首先只有询问的话就是个WC的题,线性基+生成树搞一搞就行。 进一步,考虑如果修改操作只有加边怎么做。 好像也没有什么变化,只不过需要在线地往线性基里插入东西而已。 删边呢? 注意到线性基这个玩意是不支持删除操作的。 对于这种不好删除的的东西有种不错的解决方法,就是线段树分治。 把每个操作劈成logn 阅读全文
posted @ 2019-01-19 00:19 Creed-qwq 阅读(203) 评论(0) 推荐(0)
摘要:链接:http://uoj.ac/problem/176 对于这种边权难以直接维护的都直接考虑brouvka算法。 显然,我们要做的是实现一个可以查询&x最大的数据结构。 可以先对于所有权值建立一颗01 trie树。 考虑在trie树查询答案的过程,可以考虑一个从高位到低位的贪心。 当x的第i位为1 阅读全文
posted @ 2019-01-18 00:05 Creed-qwq 阅读(449) 评论(0) 推荐(0)