【新年新自闭-图论网络流】

DFS

dfs

  • 无向图:只有树边和非树边
  1. 每条非树边对应一个环:判仙人掌
  2. 对于一个联通块忽略所有非树边进行一些操作:证明,构造
  • 有向图:树边、回向边、前向边、同层之间的边
  1. 只有树边和前向边会从dfs序小的指向大的:Dominator Tree

dfs

  • 无向图:dfs树上的每个子树对应dfs序的一个区间
  1. 主要是在树上使用
  2. /边双联通分量
  • 有向图:强连通分量
  • DAG:拓扑序

BFS

  • 无向图:边只会在同一层或隔一层之间连边
  1. 最短路、计数
  • 有向图:d(u)+w(u,v)>=d(v)
  1. 魔改的拓扑排序

强连通分量

  • 套路1:缩点后在DAG上搞事
  • 套路2:特定算法只在强连通图上有用
  • 套路3:竞赛图上的强连通性
  1. 竞赛图缩点之后是一条链,可以动态维护强连通性
  2. 竞赛图上各种计数

双连通分量

  • 熟练掌握点双和边双求法
  1. 点双:边不重复,重复的点叫割点
  2. 边双:点不重复,不存在的边叫桥
  • 套路1:把边双缩成树之后搞事
  • 套路2:把点双建成圆方树之后搞事
  1. 图上两点之间所有路径的并等价于圆方树上两点的路径
  • 套路3:动态维护双联通性

最短路

  • SPFA:它死了
  • OI中能用Dijkstra算法一定不要用SPFA
  • 套路1:删点/边之后询问最短路
  1. 在最短路树上删点/
  • 套路2:在最短路图上搞事情
  1. 注意当有零环时不一定是DAG,需要特殊处理
  • 套路3:各种奇妙的优化建图
  1. 线段树优化、分块优化
  2. 通过分析删掉不可能用到的边
  • 边权小可以用桶代替堆
  • 套路4:差分约束系统
  1. 如果限制形如f(x)-f(y)<=w(x,y)就能转化成最短路,相当于最短路的对偶
  2. 差分/前缀和为变量
  3. 可能会出现负数

K短路

  • 掌握O(k log k + m log n)的做法(可并堆)
  • 求第k优方案:构造图使得每个方案对应一条路径

欧拉回路

  • 有向/无向图上欧拉路/欧拉回路求法
  • 套路1:给无向图定向使每个点度数=-1/0/1
  • 套路2:构造

2-SAT

  • 熟练掌握求解方法
  • 套路1:优化建图
  1. 各种数据结构优化
  2. 前缀、后缀优化
  3. 建立辅助变量
  • 套路2:魔改部分限制
  1. 相当于图中加边/删边
  2. 可能需要bitset求连通性
  • 套路3:各种魔改形式的SAT问题

最小生成树

  • 掌握Prim/Kruskal/Boruvka算法
  • 套路1:最小瓶颈路为最小生成树上的路径
  • 套路2:动态最小生成树(加边)
  1. lct维护,每次加边都删除路径上最大的一条边
  • 套路3:动态维护图的连通性
  1. 以边的删除时间维护最大生成树
  • 套路4:完全图的最小生成树,权值为点权的某种操作
  1. 去掉无用边:曼哈顿距离(莫队算法乱搞用),gcd
  2. Boruvka/Prim,数据结构维护最小出边:XOR
  • 扩展:最小生成环套树(Codeforces 875F)
  • 改动Kruskal算法
  • 正确性:未选择的边一定不在答案内
  • 扩展:次小生成树

仙人掌

  • 大多数都可以转化为圆方树上的dp
  • 由于特殊性质也可以改动圆方树,使得单独一条边不构成点双。
  • 仙人掌上的数据结构

杂项

  • 给定每个点的度数,构造满足条件的无向图/
  • 要求没有重边:
  1. 每次选两个度最大的点连?
  2. 每次选一个度最大的点和一些点连(充要条件)
  • 不要求没有重边:
  1. 只要求最大点度不超过总度数的一半,且总数是偶数
  2. 每次选两个度最大的点连边
  • 树:
  1. 只要求和为2n-2,且每个点至少是1
  2. 构造使用prufer序列
  • 线性代数黑科技
  • 在无向图的dfs树上给每个非树边分配一个随机整数权值
  • 树边权值等于覆盖它的非树边权值异或
  • 一组边集是割集当且仅当对应的权值线性无关
  • Dominator Tree
  1. 至少应该知道DAG上的做法,以及当点数少时的压位做法。
  • Steiner Tree
  1. 掌握裸的dp
  • 网格图算法
  1. 分治、dp
  • 平面图算法
  1. 对偶

网络流预备知识

  1. 在所有边的容量都是1的图上:O(min(V2/3,E1/2)E)
  2. 在存在一层容量都是1的分层图上:O(E1/2E)
  3. 在单位网络上:O(V1/2E)

二分图匹配

  • 最大匹配/最大权匹配
  • 最小点覆盖/最小权点覆盖<=>最大独立集/最大权独立集
  • 最小边覆盖/最小权边覆盖
  • 求方案
  • 套路1:对于匹配的调整
  1. 参见最大流/费用流的调整
  1. 当且仅当一侧任意子集都>=邻居个数
  2. 需要对题目性质的分析
  • 套路3w(u)+w(v)>=或<=s(u,v)的限制转化为KM求顶标
  • 套路4:各种优化建图
  1. 数据结构、分块、辅助节点
  2. 只能使用网络流

网络流

  1. 一些基础原理
  2. 有源汇最大流
  3. 有源汇最小流
  4. 费用流
  5. 无源无汇可行流
  6. 有源有汇可行流:在原图中连一条 t->s[0,inf] 的边,就转化成了无源无汇可行流
  • 套路1:流的调整
  1. 最大流:残余网络上的环
  2. 费用流:残余网络上的零环
  • 套路2:一堆变量的限制,拆点之后连inf的边表示x>=v就一定满足x>=v-1
  • 套路3:各种优化建图
  • 套路4:线性规划对偶成网络流没见过)
  • 套路5:一堆等式,每个变量一正一负出现两次,根据流量平衡建图没见过)
  • 套路6:对于很有特点的图使用数据结构优化费用流

猜你喜欢

转载自blog.csdn.net/strangeDDDF/article/details/85559799