zoukankan      html  css  js  c++  java
  • 图论部分简单总结

    总的感受:

    这里大概囊括了一下图论的基础知识,图论是一个比较考验思维的部分。

    尤其是后面有关二分图,网络流等的分支,对建模转化的要求还是很高的。

    进入正题了:

    一、最短路:

    这一个部分不想多讲,虽然是很基础的一个部分,但是也很重要。

    题目:

    1、Telephone Lines。p.s:二分答案+最短路。

    2、Roads and Planes。p.s:Topo序+dijkstra。

    3、Cow Relays。p.s:Floyd+矩阵乘法。

    三连击

    二、最小生成树:

    基础算法的话也不多讲了。主要是其实有些这种类型的题也很考验思维。。。

    题目:

    1、picnic planning。 p.s:最小生成树+枚举。

    三、树的直径与LCA:

    树的直径求法: ① 树形DP。 ②两遍BFS/DFS。

    LCA的求法: ①树上倍增。 ②Tarjan+并查集(离线)。

    这一类型的题目,一般需要能够发现隐藏在题目中的一些优秀的性质,然后和这些东西挂上联系,然后就很舒服了(有前提的略略略)。

    题目:

    1、APIO2010巡逻 p.s:分类讨论+树的直径。 题解传送门

    2、NOIP2007树网的核 p.s:分析性质+树的直径。 题解传送门

    3、POJ3417Network p.s:问题转化+树上差分。 题解传送门

    4、SDOI2015寻宝游戏 p.s:dfs序+set(虚树??!!)题解传送门

    5、严格次小生成树 p.s:最小生成树+树上倍增。题解传送门

    6、NOIP2012疫情控制 p.s:二分答案+贪心+树上倍增。题解传送门

    四、基环树

    一般用来作为树问题的扩展。。解决基环树问题常用思路:一般先考虑树,然后挂上一条边后产生的影响(和没说一样)。。。

    1、IOI2008Island p.s:基环树直径。题解传送门

    五、负环与差分约束系统

    负环的判定spfa不多聊。

    讲下差分约束系统:

    这是一种特殊的N元不等式组,它的N个变量a1...aN,满足一些形如下的约束:

        ai-aj<=bk
      
        ai==aj
     
        ai-aj>=bk
    
        ...
    

    然后需要解决的问题就是求一组解使得上述约束全部满足。

    可以发现上述的式子和最短路需要满足的三角形不等式:dis[y]<=dis[x]+ver(x,y)十分相似。

    那么我们可以考虑到把这些约束看作是两两变量之间的边,相对应的跑最短(长)路即可。

    具体一点,

    对于形如:ai-aj<=ck的式子,我们可以转换成ai<=aj+ck。

    那么就相当于向j往i连了一条长为ck的边,那么对应的跑最短路即可。特殊的:如果存在负环无解

    而对于形如:ai-aj>=ck的式子,就转换成ai>=aj+ck,可以发现只需将最短路改成最长路即可。

    题目:

    咕咕咕。。。

    六、Tarjan与图的连通性

    无向图桥(割边)判定:

    low[y]>dfn[x];
    

    无向图割点判定:

    low[y]>=dfn[x];
    //需要注意的是需要判断根节点的特殊情况...
    

    无向图边双连通分量(e-DCC)求法:

    把所有的桥去掉后得到的所有的连通块都是一个e-DCC。
    

    无向图点双连通分量(v-DCC)求法:

    把所有的割点去掉后得到的所有的连通块都是一个v-DCC???。

    并不是。。。一定不能乱来啊233

    事实上可以发现一个割点可能出现在多个v-DCC中。

    这个时候就按照割点判断法则来,把用一个栈维护起来的点一个个弹出,他们组成一个v-DCC。
    
    同时,需要把割点的标记清空,因为后续它还有可能出现在别的v-DCC中。
    

    e-DCC的缩点比较常规,需要注意的是v-DCC的缩点,新的图应该包括了每一个v-DCC和每一个割点。

    有向图强连通分量(SCC)的求法:对于每一个点,若存在:

        low[x]==dfn[x];
    

    那么把栈中维护的元素弹到x为止。

    SCC的缩点也比较常规。

    有向图的必经点和必经边。

    注意:此处不考虑有环的情况。对于有环的情况请自行了解支配树。

    既然没有环,可以直接正反两次进行Topo排序。

    记录到x路径条数,不妨设从S到x路径条数为f[x],从x到T路径条数为t[x]。

    ① 如果对于一条有向边(x,y)。如果满足:

        f[x]*t[y]==f[T];
    

    则此边为必经边。

    ② 如果对一个点x。如果满足:

        f[x]*t[x]==f[T];
    

    则此点为必经点。

    题目:

    1、POI2008BLO p.s:割点。题解传送门

    2、Knights of the Round Table p.s:点双连通分量+奇环。题解传送门

    七、2-SAT问题

    对于N个变量,每个变量只有两种取值。然后有M个条件,每个条件是关于两个变量取值的限制。

    问能否找到一组合法的赋值方案使得M个条件都满足。

    判定是否合法的方法:

    首先,对这N个点建一张2N个点的图,i和i+N对应的点i的两个取值。

    然后,根据每一个条件连有向边,(一般需要转一下思维)。

    最后,tarjan缩强连通分量,如果任意一个SCC内存在i,i+N,那么就不合法。否则合法。

    求一组合法赋值方案的方法:

    这是个人理解:由于选择一个零出度点,不会对其他点造成影响。

    所以:

    1、我们可以建反图Topo序,相当于在原图自底向上进行Topo。

    每遇到一个没有确定赋值的点,就给它和它对应的点赋值。
    

    2、由于我们发现tarjan缩点得到的每一个SCC的顺序正好是自底向上的,所以我们可以直接赋值。

        val[i]=c[i]>c[opp[i]];
        //c是强连通分量编号...
        //i代表xi,0,opp[i]代表xi,1...
    

    八、二分图和网络流

    定义:一张没有奇环的无向图是二分图。

    二分图判定方法:dfs染色。若存在相邻两个点,他们的颜色相同,那么就存在奇环。

    最大匹配求法:① 匈牙利算法 ② 网络流。

    完备匹配:一张图具有完备匹配,当且仅当两边的点都为N个,且最大匹配为N。

    多重匹配:在最大匹配的基础上,点可以连不超过一特定限制数量的另一侧的点。

    最大带权匹配:边有边权,在最大匹配的前提下,使权值和最大。

    最大带权匹配求法:① KM算法 ② 费用流。

    需要注意的是:KM算法仅仅适用于二分图具有完备匹配,所以一般都是费用流。

    二分图最小点覆盖:等于最大匹配数。

    简略证明一下:

    首先,由于每条匹配边都肯定需要至少取一个端点,所以不可能小于最大匹配数。
    
    因此只需要给出一组构造,使得点数等于最大匹配数即可。
    
    构造如下:
    
    首先,先求出二分图最大匹配。
    
    然后,对于每一个左部非匹配点在进行一次寻找增广路的过程,(必然失败),同时进行访问标记。
    
    最后,选出左部未访问的节点和右部访问了的节点,这些点构成一组点数为最大匹配数的最小点覆盖。
    
    原因:
    
    左部的非匹配点显然都被标记了,右部的非匹配点肯定没被标记,一对匹配点要么同时被标记要么同时没被标记。
    
    那么:
    
    1、匹配边都被覆盖了,因为恰好每条匹配边只取了一个点。
    
    2、两个端点都是非匹配点的情况不存在,与最大匹配矛盾。
    
    3、左部是非匹配点,右侧是匹配点的非匹配边被覆盖了。
    
    4、右部是非匹配点,左侧是匹配点的非匹配边,左部点一定没被访问,所以也被覆盖了。
    

    证毕。

    二分图最大独立集:等于总点数-最小覆盖,即也等于总点数-最大匹配。

    证略。

    网络流初步

    最大流:EK算法,dinic算法(当前弧优化)。

    最小割:最小割等于最大流。

    费用流:spfa-EK费用流。

    题目:

    1、Ants p.s:二分图带权最小匹配。题解传送门

    2、网络流24题 No p.s...题解传送门

    最后的最后

    蒟蒻的图论部分就到此结束了,有些地方讲的有点含糊不清,请多包容。

    上述题解会很快跟上的。。。(希望别咕掉了@ο@

    The Real End

  • 相关阅读:
    给python脚本传递命令行参数
    python.exe和pythonw.exe的区别(区分.py、.pyw、.pyc文件)
    python包管理器pip
    python从新手到安装指南
    python基础知识
    使用Lua做为MMOARPG游戏逻辑开发脚本的一点体会
    游戏中各音效的音量默认值
    Unity Editor自定义菜单排序(MenuItem Order)
    没有安装vs通过Rider编译Dll
    MyBatis-Plus 代码生成器
  • 原文地址:https://www.cnblogs.com/Bhllx/p/10610275.html
Copyright © 2011-2022 走看看