当前位置:文档之家› 图论基础与网络流习题集锦

图论基础与网络流习题集锦

图论基础与网络流习题集锦
北京大学 朱睿
大纲
图论部分: 1.图论简介 2.生成树与生成树计数 3.欧拉回路与哈密顿回路 4.割与流,匹配
网络流问题部分: 1.习题 2.习题 3.更多的习题
图论简介
一个无向图G一般被抽象为一个二元组<V,E> 1.V是一个集合并被称为G的点集。 2.E是V的无序积的多重子集,被称为G的边集。其 元素被称为无向边。
思考:如何找到图中的网络流模型?
提示:发现“折线”这一条件的特殊性。
网络流习题集锦:股票走势
解答: 首先考虑如何建图。 假设我们将每只个股都看做一个点,如果A与B可以放 在一张纸上,就连一条边,这样得到了一个无向图。 但是很不幸,这个无向图没有给我们提供任何信息。 考虑到折线一定是连续的,那么两个可以在同一张纸 上的股票,是可以定义序关系的的。 将无向图改造成有向图,若某只股票的折线完全高于 另一只股票的折线,那么连一条有向边,这样我们得 到了一个拓扑图,问题转化成了用最少的链来覆盖这 个有向图,即最小链覆盖。 使用匹配/网络流解决最小链覆盖,由于链上每个节点 都有一个后继节点,那么将每个点拆成两个点排成两 排,若A能到B则从A左向B右连边,那么答案就是n匹配数。
网络流习题集锦:路径覆盖
路径覆盖类题目,主要是指这样一类问题:给定一个 图以及一系列行走规则,问如何使用最小的代价将用 一系列按照行走规则的路径覆盖住。 下面我们就来具体问题具体反分析。
网络流习题集锦:股票走势
小L最近迷恋上了炒股,他拿到了n支股票在0到k-1时 刻的价格表。他想要把每只股票的价格根据时刻依次 连成一个走势折线图,以此观察股票的情况。 但是小L不想铺张浪费,所以在每张纸上他不想只画 一条折线,而是把尽量多的折线画到一张纸上,使用 尽量少的纸。两条折线能够画到一张纸上,是要求它 们不相交,包括在端点处。 数据规模: 1≤n≤100,2≤k≤25
流: 假设G(V,E) 是一个有限的有向图,它的每条边 (u,v)∈E都有一个非负值实数的容量c(u,v) 。如果 (u,v)不属于E,我们假设c(u,v) = 0 。我们区别两个 顶点:一个源s和一个汇t。一个网络流是一个对于 所有结点u和v都有以下特性的实函数f:V×V→R 其满足以下三个要求: 1.容量限制:f(u,v) <= c(u,v) 2.斜对称:f(u,v) = -f(v,u) 3.流守恒:除非u=s或u=t,否则Σ(w∈V) f(u,w) = 0 则该网络流的流量为s的总输出(或t的总输入)
提Hale Waihona Puke :按位处理。网络流习题集锦:最优选择
解答:首先可以发现,位与位之间没有任何关系,可 以按位处理。也就是说,我们只需要确定某个点选0还 是选1就可以了。 由于只有01不同的点才会产生代价,那么我们自然的 想到了最小割,也就是使01不同的边尽量少。
图论简介
平行边:即重边。 环:即自环。 简单图:不含平行边且不含环的图。 度:无向图中,与某点关联的边的数量。 入度,出度:有向图中,与某点关联的入边和出边 的数量。 K-正则图:无向简单图中所有点的度数都为K。 握手定理:所有点度数之和等于2*|E|。
同构:两个无向图<V1,E1>与<V2,E2>,若存在双 射函数f:V1->V2,使得对于任意vi,vj ∈ V1,f(vi),f(vj) ∈ V2时, <vi,vj> ∈ E1当且仅当<f(vi),f(vj)> ∈ E2, 则称这两个无向图同构。
网络流习题集锦:闭合子图
最大权闭合子图类问题:
给定一些事件。
事件之间有依赖关系,比如若选了A就一定要选B。
建图的经典思想: S->(pA)A->(inf)B->(pB)T S->A->T S->B->T A->(c)B 用c作为最小割
网络流习题集锦:加工顺序
有N个工作,M种机器,每种机器你可以租或者买过来. 每个工作包括若干道工序,每道工序需要某种机器来 完成,你可以通过购买或租用机器来完成。现在给出这 些参数,求最大利润。 N<=1200,M<=1200
有向图欧拉回路的充要条件:每个点的入度和等于出 度和。那么此时该图至少要保证入度和-出度和是一个 偶数。 然后使用网络流,源点向所有入度和>出度和的点连 一条大小为|入度和-出度和|/2的边,所有出度和>入度 和的点连一条|出度和-入度和|/2的边。 无向图中边(vi,vj)若变成了有向边<vi,vj>,那么在流中 连一条容量为1的边<vj,vi>,意为反悔。满流则有解。
生成树与生成树计数
生成树:一个连通无向图的极小连通子图,被称为 这个图的生成树
最小生成树:一个边带权的连通无向图的极小连通 子图,同时包含最小的边权 —Prim算法 —Kruskal算法 生成树计数问题:如何求出一个连通无向简单图的 不重复生成树个数?
生成树与生成树计数
Matrix-Tree(矩阵树)定理: 假设图G是一个包含n个点无向图。
在这个图上运行费用流,就能得到最小代价。
网络流习题集锦:营救行动
一个N个点M条边的带点标号的无向图,经过一条边需 要一定的时间。现在有K个人在0号点,K个人可以分 头行动。在访问第i号点之前不能经过第i+1号点,K个 人中任意一个经过某个点之后就可以认为该点被访问 了。问访问完所有点的前提下,这K个人的行走路径长 度之和最小是多少。
定义G的度数矩阵D[G]为一个n*n的矩阵,并且对于 任意i ≠ j,有Dij=0;当i=j时,Dij为节点i的度数。 定义G的邻接矩阵A[G]为一个n*n的矩阵,并且对于 任意<i,j>属于G的边集时,Aij为1;否则为0。 定义G的Laplace算子(Kirchhoff矩阵)为C[G]=D[G]A[G]。 那么图G的生成树个数为C[G]的任意一个n-1阶主子 式(即去掉第r行第r列,r任意)的行列式之绝对值。
割:设Ci为网络N中一些弧的集合,若从N中删去Ci 中的所有弧,即:使得从顶点Vs到顶点Vt的路集为 空集时,称Ci为Vs和Vt间的一个割。
割与流,匹配
最大流:从s到t的所有可行的网络流中,流量最大 的网络流。
最小割:从s到t的割中,删除边权和最小的割。 对于一个给定的s和t,最大流=最小割
割与流,匹配
网络流习题集锦:星际竞速
N个点M条边的有向图,将所有点从1~N标号,每条边 Eij都只能从编号小的点走到编号大的点,代价为Pij。
可以使用瞬移,从任意点瞬移到i号点的代价为Ai。 要求从一个标号为N+1的孤立点出发,经过所有点一 次且仅一次,问最小代价。 N <=800,M<=15000
网络流习题集锦:星际竞速
解答: 将所有工人看做一个点排成一排在左边,所有产品看 做一个点排成一排在右边,若某个工人会制造某个产 品,则在相应的两个点上连容量为1的边。
此时,我们考虑到对这个图做网络流,源向左边每个 点都连一条容量为K的边,右边每个点向终点连一条容 量为K的边,如果没有流满,那么显然是不可能有解的。 而如果流满,则根据Hall定理,我们也可以知道它是有 解的,然后一遍一遍进行二分图匹配即可。
网络流习题集锦:营救行动
其实这也是一道路径覆盖的题目,相当于把1~n这个序 列拆成K个序列,并使得总路程和最小。
于是我们可以先用改动过的Floyd算法求出在保证只访 问标号比i,j都小的节点的前提下,i到j的最短路。 之后和上题有相似之处,将点i拆成两个点Ai和Bi。 对于i!=0,由Ai向Bi连一条费用为0容量为1的边,然后 Bi向汇点连一条容量为1费用为0的边。 源点向B0连一条容量为k费用为0的边。 每个B点都向比自己大的A点连一条容量为1费用为最 短路的边。 等等,这个算法好像有问题? 与上一题不同的是,这题要求遍历所有节点。因此我 们应该把所有A->B的边增设下界1。
网络流习题集锦:星际竞速
解答: 建立虚拟源st与虚拟汇en。 将每个点都拆成两个两个点,如u -> (u, u’)。 从st向所有u连边,容量为1费用为0; 从所有u’向en连边,容量为1费用为0; 若u,v之间在原图中有边,那么在u与v’之间连边,费用 为路径费用Puv,容量为1。 从st向所有v’连边,费用为瞬移到v点的代价。
网络流习题集锦:趣味工厂
有一个工厂,工厂中有n个工人与n种产品。每个工人 能够生产这些产品中的一部分。
现在我们希望作一个k天的工作规划,使得每一天每一 个产品恰好有一个工人在从事生产,并且在这k天内每 个工人都不会生产重复的产品。 1≤n≤100, 1≤k≤n 思考:直接的贪心算法是否正确?
网络流习题集锦:趣味工厂
一个有向图D一般被抽象为一个二元组<V,E> 1.V是一个集合并被称为D的点集。 2.E是V的卡氏积的多重子集,被称为D的边集。其 元素被称为有向边。 图的阶:即|V|。 零图:|E| = 0。 基图:将D的有向边改为无向边,成为一个无向图。 无向完全图:简单无向图中每个点都与其他点相邻。 有向完全图:简单有向图中对于任意vi,vj ∈ V都有 <vi,vj> ∈ E且<vj,vi> ∈ E。
网络流习题集锦:欧拉回路
给定一张包含N个点M条边的图,其中有些边是单向 边有些边是双向边。问是否存在欧拉回路。
N和M范围不限定,试给出尽量优秀的算法。
网络流习题集锦:欧拉回路
解答:首先我们知道,若该混合图有欧拉回路,一定 有一种方法使得给该图中所有无向边定向后的有向图 仍然有欧拉回路。那么我们首先给所有无向边随意定 一个向。
同样的,我们可以定义边覆盖集(即用边覆盖所有 点)与边独立集(即任意两条边之间没有共同点)。
割与流,匹配
匹配:G的一个边独立集,又被称为G的一个匹配。 极大匹配与最大匹配。
二部图(二分图):若无向图G的点集V可以分割 成两个互不相交的子集,并且对于边集E中的所有 边(vi,vj)所关联的两个顶点vi和vj都分属这两个子集, 那么图G就被称为一个二部图。 二部图匹配的霍尔定理(婚姻定理):设有二部图 G=<V1,V2,E>且|V1|<=|V2|,则该图有完美匹配的 充要条件是,对于任意V1的子集S,设|S|=k,则与 S相连的点集大小 不小于k。 推论:若G为k-正则二部图,那么G中存在k个边不 同的完美匹配。
相关主题