最大流学习笔记(5)-前置重贴标签算法一

上一篇

1、许可边:设$f$是流网络G的一个预流,$h$是高度函数。对于边$(u,v)$,如果$c_{f}(u,v)>0$且$h(u)=h(v)+1$,那么边$(u,v)$是一个许可边。否则是非许可边。许可网络$G_{f,h}=(V,E_{f,h})$,$E_{f,h}$是许可边的集合

2、许可网络是有向无环的。因为对于每条许可边$(u,v)$来说,$h(u)=h(v)+1$,所以如果存在环,设环的大小是$k$,那么最后会有$h(u)=h(u)+k$。这是不满足的。

3、 如果$u$是溢出节点,且$(u,v)$是许可边,则$PUSH(u,v)$可作用于节点$u$上,该操作不产生新的许可边,但有可能导致边$(u,v)$成为非许可边。

4、如果$u$是一个溢出节点,且不存在从$u$出发的许可边,则$RELABEL(u)$可作用于$u$,操作之后将至少存在一条从$u$出发的许可边,但是不存在进入$u$的许可边。

5、在该算法中,将所有$u$的邻接边(包括离开$u$的和进入$u$的)都组织成一个链表$u.N$,其中$u.N.head$指向链表第一个节点,$v.next-heighbor$指向下一个,最后一个节点的下一个为$NIL$,$u.current$指向当前的节点。

6、释放溢出节点:这个操作是将溢出节点$u$的流推送的相邻节点。下面是该函数的实现:

7、$DISCHARGE$函数进行第7行的$PUSH$操作时该操作适用于节点$u$,执行第4行的$RELABEL$函数时该操作适用于$u$.

以下是证明

3的证明

$PUSH(u,v)$能够产生的唯一的残存边是$(v,u)$,但是$h(u)=h(v)+1$,所以$(v,u)$不可能成为残存边。同时如果该推送是一个饱和推送,则操作后$c_{f}(u,v)=0$,这使得$(u,v)$成为非许可边

4的证明

因为对$u$重贴标签是将$u.h$的高度变为从其出发的所有残存边高度最小的加1,所以至少有一条边是到达这个高度最小的节点。

假设重贴标签之后存在进入$u$ 的边,比如$(w,u)$,那么有$h(w)=h(u)+1$,而操作之前必有$h(w)>h(u)+1$,根据这里的3,$(w,u)$不属于残存边。

7的证明

(1)第一行和第六行的判断使得$PUSH$操作是合理的。

(2)对于$RELABEL$函数,有两种情况:

i 某次$DISCHARGE$被调用时,$u.current$指向链表的开头,这时当执行第四行时所有的边都是非许可边。所以可以执行重贴标签操作

ii 某次$DISCHARGE$被调用时,$u.current$指向链表的中间,也就是说执行到中间然后这个函数结束了。现在又回来接着执行。那么我们只需要证明其他节点执行$PUSH$和$RELABEL$操作不会使得$u$到$u.N$开始到$u.current$这中间的节点的边变成许可边就好。首先,其他节点的操作由3可知不可能产生新的许可边。由4可知其他节点进行重贴标签操作不会不会产生进入的边,也就是说没有从$u$出发的边。

时间: 2024-11-05 08:53:44

最大流学习笔记(5)-前置重贴标签算法一的相关文章

最大流学习笔记(3)-推送重贴标签算法一

上一篇 1 预流:预流是一个$V\times V \rightarrow  R$的函数$f$,该函数对于每个节点$u\in V-\{s\}$满足容量限制条件和下面的性质: $\sum_{v\in V}f(v,u)-\sum_{v\in V}f(u,v)\geq 0$ 定义$e(u)=\sum_{v\in V}f(v,u)-\sum_{v\in V}f(u,v)$为进入节点$u$的超额流.如果$e(u)>0$,称$u$溢出 2 高度函数的定义:设G是一个流网络,如果函数$f:V\rightarro

【web开发学习笔记】Struts-Tags学习笔记1 - 通用标签和控制标签

通用标签和控制标签 第一部分:代码 //前端 <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=GB18030" /> <title>Insert title here</title> </head> <body> 访问属性 <a href="<%=contextP

[Spring MVC]学习笔记--表单标签的使用

github例子地址: https://github.com/lemonbar/spring-mvc-jsp 效果图 关于spring mvc的标签的讲解, 有一篇blog已经讲的很细了. http://haohaoxuexi.iteye.com/blog/1807330 官方文档地址: http://docs.spring.io/spring/docs/4.0.6.RELEASE/spring-framework-reference/htmlsingle/#view-jsp 而且我在上面的例子

学习笔记(一)HTM标签

学习笔记(一)HTML基础知识 HTML:超文本标记语言(Hyper Text Markup Lanuage) HTML就是砌墙,把适当的砖块摆在合适的位置,就能完成一个页面. (一)网页文件命名: a.不可以用中文 b可以使用英文或数字,也可以用拼音,但不要中西合并. c.大小写问题:windowzz操作系统不区分大小写,Linux区分大小写, 所以要求统一区分大小写. d.后缀名必须是html. e.声明html文件时, 最好不要使用特殊数字符,可以用减号或下划线. (二)基本框架: bod

[原创]java WEB学习笔记52:国际化 fmt 标签,国际化的总结

本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 ---------------------------------

IO流学习笔记1——File类

Java的IO支持通过java.io包下的类和接口来支持,在java.io包下主要包括输入.输出两种IO流,每种输入.输出流又可以分为字节流和字符流两大类.其中字节流以字节为单位,来处理输入.输出操作,而字符流则以字符来处理输入.输出操作.除此之外,Java的IO流使用了一种装饰器设计模式,它将IO流分成底层节点流和上层处理流,其中节点流用于和底层物理存储节点直接关联--不同物理节点获取节点流的方式可能存在一定的差异,但程序可以把不同的物理节点流包装成统一的处理流,从而允许程序使用统一的输入.输

Java I/O流学习笔记(二)

1. java中有两种类型的流,分别为字节流和字符流.jdk为字节流提供了:InputStream,OutputStream:为字符流提供了Reader以及Writer.    a. 文件在硬盘上的存储方式就是以byte的集合存储的,在磁盘上保留的并不是文件的字符而是先把字符编码成字节,再储存这些字节到磁盘.在读取文件(特别是文本文件)         时,也是一个字节一个字节地读取.    b. 缓冲流,打印流,对象流,文件流,转换流2. 字符流和字节流的区别?   a. 流的概念:在程序中所

java IO流学习笔记

import java.io.*;class hello{ public static void main(String[] args) { System.out.println(File.separator); System.out.println(File.pathSeparator); }}[运行结果]: \ ; String fileName="D:"+File.separator+"hello.txt"; File f=new File(fileName)

最大流学习笔记(1)

1 流网络.流网络G=(V,E)是一个有向图,每条边$(u,v)\in E$有一个非负容量值$c(u,v)\geq 0$.如果$(u,v)\notin E,c(u,v)=0$.另外有一个源节点s和汇点t. 2 流.G中的流是一个实值函数$f:V\times V\rightarrow R$,满足: (1)容量限制:对所有的$u,v\in V$,$0 \leq f(u,v)\leq c(u,v)$ (2)流量守恒:对所有的$u\in V-\{s,t\}$,满足$\sum_{v\in V}f(v,u)