随笔分类 -  lct

摘要:这个题目的关键就是判断 大爷所有可能会走的路 会不会经过询问的边。 某一条路径经过其中的一条边, 那么2个端点是在这条边的2测的。 现在我们要判断所有的路径是不是都经过 u -> v 我们以u为根节点, 如果所有的路劲的起点 有且仅有一个点在 v 的子树内 我们就可以知道这个边是合法的。 那么我们每 阅读全文
posted @ 2018-09-13 16:25 Schenker 阅读(129) 评论(0) 推荐(0) 编辑
摘要:link-cut tree #define lch(x) tr[x].son[0] #define rch(x) tr[x].son[1] const int N = 5e5 + 100; struct Node{ int rev, rt; int son[2], pre; int mx, val, 阅读全文
posted @ 2018-08-23 16:50 Schenker 阅读(166) 评论(0) 推荐(0) 编辑
摘要:Nasta Rabbara 题意:简单来说就是, 现在有 n个点, m条边, 每次询问一个区间[ l , r ], 将这个区间的所有边都连上, 如果现在的图中有奇数环, 就输出 “Impossible”, 否者就输出 ”possible“。 题解: 步骤1:我们先找出每个最小的 [ l, r] 当这 阅读全文
posted @ 2018-08-21 13:52 Schenker 阅读(319) 评论(1) 推荐(0) 编辑
摘要:题目传送门 题解: 首先关于二分图的性质, 就是没有奇环边。 题目其实就是让你判断每个时段之内有没有奇环。 其次 lct 只能维护树,(反正对于我这种菜鸟选手只会维护树), 那么对于一棵树来说, 填上一条边会形成奇数环,或者偶数环。 现在我们考虑偶数环, 对于偶数环来说, 如果加上一条边都能使得这个 阅读全文
posted @ 2018-08-21 10:35 Schenker 阅读(134) 评论(0) 推荐(0) 编辑
摘要:题解:先将所有的边按照 a 从小达到排序, 类似于最小生成树的方法, 用并查集维护2个点是否联通, 每次处理一条新的边的时候, 先判断这2个点是否联通, 如果不连通就把这2个点连边,如果这2个点已经联通了,那么如果新加上这条边之后就会和原来的链构成一个环, 我们再去掉这个环上b最大的那条边, 每次处 阅读全文
posted @ 2018-08-17 13:44 Schenker 阅读(172) 评论(0) 推荐(0) 编辑
摘要:这里比上次多了几个操作。 1. make_root(u) 换根节点, 先access(u), 再splay(u),将u移动到splay树的最顶上, 现在这棵splay对于root来说 只有左子树上有东西, 右子树上没有东西, 那么交换一下左右子树, 再打个标记, 这样就变成了左子树没东西,右子树上有 阅读全文
posted @ 2018-08-16 10:20 Schenker 阅读(190) 评论(0) 推荐(0) 编辑
摘要:上一次用分块过了, 今天换了一种lct(link-cut tree)的写法。 学lct之前要先学过splay。 lct 简单的来说就是 一颗树, 然后每次起作用的都是其中的某一条链。 所以每次如果需要用到一条链, 就要先 access 一下某个位置, 到root, 将其他的非法的东西抠掉。 并且 一 阅读全文
posted @ 2018-08-14 16:33 Schenker 阅读(145) 评论(0) 推荐(0) 编辑
摘要:Tree 题意: 给你一颗树, 每一个节点都有一个权值, 如果一个石头落在某个节点上, 他就会往上跳这个的点的权值步。 现在有2种操作, 1 把一个石头放在 x 的位置 询问有跳几次才跳出这棵树, 2 修改某个节点的权值。 解法:树上分块, 用dfs分好块之后。 对于每一块都处理出如果石头落在某个位 阅读全文
posted @ 2018-08-14 08:28 Schenker 阅读(440) 评论(0) 推荐(0) 编辑