参加了一个网络赛,感觉水的可以,发现有时候做题,会因为之前的理解,局限现在的自己。这个很麻烦,可见,开拓思路是非常重要的,其实很多题都可以做,知识点都会,但是时间等因素可能不够吧,首先,发现找规律的题,对我来说真的看运气,有时候找起来确实慢了点,还有这种基本知识都差不多会的,应该一道题过不了,直接跳过,进入下一题。要不然,浪费时间。感觉题目什么的没什么可以说的了,都是想一想,然后就可以直接写代码的题。。。。

     今天继续看了图论的知识点,看了拓扑排序的题目,欧拉回路的题目,连通性的题目,感觉这些题目要仔细体会可能发生变化的地方,即会运用。这些题的大部分的框架还是不会发生太大的变化,这些题目的核感觉就是在dfs的途中,给每个结点加上一点信息,从而达成某种目的,在遍历的时候还可以修改更新这些信息。当想到这些的时候,感觉这些结点上是否还可以加上一些其他的,就可以决解其他问题了。(感觉有些想当然了)。在之前学习线段树的时候就是和这个差不多,需要在结点处加上一些信息,合并的时候进行一些操作等等,就可以实现某些目的。看来很多算法都有相通的地方。

     连通性,无向图是点双连通,边双联通,代码实现差不多,有向图是强连通,好像比较重要,不过还没有做过多研究。

     拓扑排序基本套路: 思路,在有向图建立完成之后,维护两个点集,一个是当前出度为0的点集,记为①,另一个是出度不为0 的点集,记为②,以及一个记录各个点出度的数组。首先遍历一遍图的全部边,初始化所有点的出度,然后出度为0的点依次 入①,然后将①中的点分别出列,每次出列都需要更新各个点的出度,即把所有跟出列的点邻接的点出度-1(有多条边,则相应减掉边数,一般简单图不会有多重边),直至①变成空集。这个时候,如果②也变成了空集,证明排序成功,否则,原图不存在拓扑排序(图中有环)。最终的排序结果就是从①中出列的点的逆序。出度改为入度就是顺序了。