神秘图论技巧
给定一个点双连通分量中的两个点
以
如果
否则我们需要给
设
因为是 dfs 树,所以每一条非树边都是返祖边,并且每一条返祖边都对应了一个简单环。
首先我们找到下端点在
然后我们每次考虑
考虑这个过程中经过的所有返祖边。我们可以归纳地证明这些返祖边所对应的简单环的异或也是一个简单环。每次新加入的简单环与之前异或出来的简单环的交集为树上的一条非空简单路径。
同时因为我们一旦跳到
直接将这个简单环作为
时间复杂度
给定一个有向图,每次你可以删除一个环,你需要构造一组操作使得最后得到一个 DAG。
算法一:
如果一个点已经没有出度,那么它一定不会出现在某个环中,在接下来的过程中不需要考虑这个点,将它从图中删掉即可。
否则对于每个点找任意一条出度,此时可以得到一个内向基环森林,将其中的环删除即可。
不断执行这个过程直到图为空,我们就得到了一种删除环的方法。
时间复杂度
算法二:
直接进行 dfs,维护当前从起点开始走的路径
如果
否则任意找
枚举每个点作为起点都进行一次上述过程即可。
可以发现每条边只会访问一次,因为在回溯的时候所有从
如果按照固定的顺序访问一个点的出边,那么一个点的出边中被删除的一定是一段前缀。因此可以直接采用当前弧优化来实现,即记录每个点第一条没有被删除的出边。
给定一个二分图,点带权,求一组匹配使得点权和最大。
不加证明地给出结论:
-
设将左部点点权变为
0 时答案为ans_1 ,将右部点点权变为0 时答案为ans_2 ,则有ans=ans_1+ans_2 。 -
不妨考虑计算
ans_1 ,按照点权从大往小依次考虑每个右部点u ,维护一个集合S 。如果存在一组匹配使得S\bigcup\{u\} 中的所有点都在匹配中,那么就令S\leftarrow S\bigcup\{u\} ,否则S 不变。答案即为S 中所有点的点权和。 -
设得到的左部点集合为
S (对应ans_2 ),右部点集合为T (对应ans_1 )。一定存在一组最大(边数最多)匹配使得左部点集合恰好为S ,右部点集合恰好为T 。