2018年8月23日训练日记

欧拉图:有向图、无向图的欧拉路、欧拉通路。注意真正的欧拉路是dfs之后的逆序。所以保证字典序最小需要注意。

注意:必须判断该图是否只有一个连通分量(并查集)。否则一定不存在欧拉路。经典问题:拼接单词

拓扑排序:结论:能拓扑排序 <==>不存在3节点环。注意全排序要求队列里始终只有一个元素。字典序最小用优先队列。然后相等的情况可用并查集缩点。

二分图判定:dfs染色。图连通且非二分图的时候,才能保证有完美时刻存在。例题。

割顶与桥:注意两者代码中的区别。u若是根且孩子数<=1,那u就不是割顶。

结论:删除一个无向图中的点,能使得原图增加几个连通分量呢?如果该点是一个孤立的点,那么增加-1个。如果该点不是割点,那么增加0个。如果该点是割点且非根节点,那么增加该点在dfs树中(无反向边连回早期祖先的)的儿子数。如果该点是割点且是一个dfs树的根节点,那么增加该点在dfs树中(无反向边连回早期祖先的)的儿子数-1的数目。

无向图双连通分量:点双连通:连通图无割点。边双连通:连通图无桥。注意点双连通不一定边双连通。求uv之间有几条路径

结论:对于一棵无向树,我们要使得其变成边双连通图,需要添加的边数 == (树中度数为1的点的个数+1)/2。

有向图的强连通分量:

结论:对于一个DAG,我们需要添加max(a,b)条边才能使其强连通。其中a为DAG中出度为0的点总数,b为DAG中入度为0的点总数。

2-SAT:定义:现有一个由N个布尔值组成的序列A,给出一些限制关系,比如A[x]AND A[y]=0、A[x] OR A[y] OR A[z]=1等,要确定A[0..N-1]的值,使得其满足所有限制关系。这个称为SAT问题,特别的,若每种限制关系中最多只对两个元素进行限制,则称为2-SAT问题。(虽然还没遇到过2-SAT的题目,不过觉得最根本的还是掌握这个问题的定义)注意每个人只能有01两种限制。

Floyd算法(O(n^3)):经典三重for循环,可解决负权问题,可以求任意两点最短路。多结合其他需要先求最短路的知识一起用。单独用的话就是一些变形(比如求a到b的路径中最大值的最小值这种)。。。

Dijkstra算法:标准的dijk算法是n^2的,但根据二叉堆(O(mlogn))、stl优先队列(O(mlogm))、斐波那契堆(O(nlogn+m))可以进行不同的优化。模板只整理了优先队列的。缺点就是不能处理负权,只能求单源最短路。还有一些删边、边权取办等问题想好怎么样枚举保证结果正确。

今天就先到这里,明天看图论剩下的部分,争取看完。

 

你可能感兴趣的:(训练日记)