怎么说呢,我也不知道该咋讲,你就手画一下然后 yy 一下就发现这么做是对的. 为什么我明明都想出来了,却还是讲不出来啊~ #include <cstdio> #include <vector> #include <algorithm> #define N 800004 #define inf 1000000000 #define setIO(s) freopen(s".in","r",stdin) ,freopen(s"…
题目传送门 题解: 首先关于二分图的性质, 就是没有奇环边. 题目其实就是让你判断每个时段之内有没有奇环. 其次 lct 只能维护树,(反正对于我这种菜鸟选手只会维护树), 那么对于一棵树来说, 填上一条边会形成奇数环,或者偶数环. 现在我们考虑偶数环, 对于偶数环来说, 如果加上一条边都能使得这个图出现一个奇数环, 我们现在任意删除一条边,都还是会存在一个奇数环. 那么当出现偶数环的情况下, 我们可以删除一条边, 保存树的性质. 当出现奇数环的时候, 我们也需要删除某一条边, 并且需要标记被树…
bzoj 4025 二分图 [题目大意] 有n个点m条边,边会在start时刻出现在end时刻消失,求对于每一段时间,该图是不是一个二分图. 判断二分图的一个简单的方法:是否存在奇环 若存在奇环,就不是二分图. 假设加入一条u->v的边,u,v已经联通,怎么知道是否是一个奇环呢?只需要知道u,v之间的距离就行了.距离为偶数则是一个奇环. 路径?加边?删边? 很容易就想到是LCT. 维护u->v的距离. 每次加入一条边,就判断是否先前已经联通,否,则家父,若是,就判断u,v之间的距离. 假若已经…
[BZOJ 4025]二分图(线段树分治+带边权并查集) 题面 给出一个n个点m条边的图,每条边会在时间s到t出现,问每个时间的图是否为一个二分图 \(n,m,\max(t_i) \leq 10^5\) 分析 我们知道一个图是二分图的充要条件是图中不存在奇环.于是可以用边带权并查集维护两点间距离的奇偶性,每次加边的时候,如果新加入的边会产生一个偶环,那加不加这条边都不影响结果,直接跳过:如果加入的边会产生奇环,那么就更新答案. 考虑如何删除一条边.如果我们不路径压缩而是用按秩合并的话,那么可以通…
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4025 线段树分治,用 LCT 维护链的长度即可.不过很慢. 正常(更快)的方法应该是线段树分治+并查集(按秩合并,链长可以暴力爬)或者 LCT 维护删除时间最大生成树.就不写了. #include<cstdio> #include<cstring> #include<algorithm> #include<vector> #define ls Ls[c…
链接:https://www.lydsy.com/JudgeOnline/problem.php?id=4736 题面: 寒冬又一次肆虐了北国大地 无情的北风穿透了人们御寒的衣物 可怜虫们在冬夜中发出无助的哀嚎 “冻死宝宝了!” 这时 远处的天边出现了一位火焰之神 “我将赐予你们温暖和希望!” 只见他的身体中喷射出火焰之力 通过坚固的钢铁,传遍了千家万户 这时,只听见人们欢呼 “暖气来啦!” 任务描述 虽然小R住的宿舍楼早已来了暖气,但是由于某些原因,宿舍楼中的某些窗户仍然开着(例如厕所的窗户)…
4025: 二分图 题意:加入边,删除边,查询当前图是否为二分图 本来想练lct,然后发现了线段树分治的做法,感觉好厉害. lct做法的核心就是维护删除时间的最大生成树 首先口胡一个分块做法,和hnoi2016第一题类似的偏序关系,一样做. 线段树分治 数据结构题中如果使用对时间cdq分治,要求每个操作独立,不能很好的处理撤销(删除)操作. 采取线段树区间标记的思想 对于一个操作,它的存在时间是\([l,r]\) 我们模仿线段树打标记的过程进行分治,\(cdq(l,r,S)\)表示当前处理时间\…
Description 神犇有一个n个节点的图.因为神犇是神犇,所以在T时间内一些边会出现后消失.神犇要求出每一时间段内这个图是否是二分图.这么简单的问题神犇当然会做了,于是他想考考你. Input 输入数据的第一行是三个整数n,m,T. 第2行到第m+1行,每行4个整数u,v,start,end.第i+1行的四个整数表示第i条边连接u,v两个点,这条边在start时刻出现,在第end时刻消失. Output 输出包含T行.在第i行中,如果第i时间段内这个图是二分图,那么输出"Yes"…
这个还是比较好理解的. 你考虑如果所有边构成一棵树的话直接用 LCT 模拟一波操作就行. 但是可能会出现环,于是我们就将插入/删除操作按照时间排序,然后依次进行. 那么,我们就要对我们维护的生成树改变一下定义:生成树中的每一条边都是关键边,且要求两点间关键边的最小值最大. 什么边能成为关键边?就是这个边要是在当前时刻被删掉的话这个图就不可能联通. 而一条边在插入时如果两个端点不连通,显然是关键边,而如果联通,则替换掉两点路径中结束时间最早的那个边.那么新加入的边就成为了关键边,之前那个边就没有用…
题面 考虑没有询问,直接给你一个图问联通块怎么做. 并查集是吧. 现在想要动态地做,那么应该要用LCT. 考虑新加进来一条边,想要让它能够减少一个联通块的条件就是现在边的两个端点还没有联通. 如果联通了,应该会形成一个环,我们其实可以把环中最早加进来的边删掉再加进来这条边,也不影响整个的联通性对不对. 于是我们用LCT维护一下最大生成树,顺便求出一个\(pre[i]\)表示\(i\)这条边加进来以后,环里面最早加进来的边的编号. 可以发现\(pre[i]\leq l\)那就说明,\(i\)这条边…