網絡流

    最近在學網絡流,我真是受夠了網上一片一片的毫無營養的比作水流的講解。有點不尊重的說,我覺得教材和網上的解釋完全沒有爲我這樣的初學者點明網絡流到底是一個什麼東西,所以,我們這些蒟蒻只能自救了……這篇文章先說基本概念,下一篇文章再說模板。

    首先,我們先要明確,網絡流是一個關於圖論的思想。它是一種思想因此可以解決一系列問題。但它根本上是一個關於圖論的思想。要用網絡流解題先要有圖,OK?這是網絡流裏有“網絡”的原因。

    然後,爲什麼網絡流裏有個“流”呢?因爲網絡流這個概念(或者說模型?)它的性質和水流有許多相似之處。

    我們先要有一個源點s和一個匯點t。這個源點和匯點,大部分時候是你自己建立的,偶爾題目給你圖了,那時候有一定機率題目給了你源點和匯點。

    然後我們就有了一個圖。例如:

    這個時候我想先介紹基本概念,具體操作我會在後面的文章中說一下。老實說,教材上光給概念的行爲真是令人惱火啊……

    我們有了流量圖之後,就可以給邊賦值了。這個值代表什麼呢?看題目而定。因爲根本沒有一個通解可以概括這裏邊權值的作用。我們要注意的是,這裏的邊權,只是一個理論值,是我們可以走的,而不是我們走的。我們到底怎麼走,需要後面程序的計算。

    在說明網絡流的三大性質之前,我們先要明確,我們的“走法”,或者叫“流”包括一系列路徑。這些路徑都從源點s出發,到達匯點並把它們的值加在匯點t上,匯點就是我們要求的東西。比如最大的人數,最小的花費等等。

    以上是爲了幫助理解的,下面就是真的了。

    網絡流有三個性質和三個重要概念。下面一一介紹。

    性質1:容量限制。也就是說我們的“走法”不能超過邊權。比如一個人走過去你不能加二。

    性質2:反對稱性。對於一個節點,一個人走過去和負一個人走過來等價。

    性質3:流守恆性。除了源點和匯點之外其餘的節點都是用來過渡的,這個點上的流入量加流出量應當是0。

    概念1:殘留網絡。我們之前提到了“走法”不能超過邊權。也就是說我們可能會有剩餘。這個剩餘是以後提升的空間。我們通常用節點來記錄殘餘。

    概念2:增廣路徑。假設在“走法”之外(或之中)我們選擇了一條路徑。這條路徑是由節點和邊構成的。我們高興的發現這條路徑上的點中有的點的殘餘不是0。等等,有的不是0是什麼意思?這裏我們需要注意,我們在意的是路徑中所有點的殘餘的最小值(這些點當然不包括源點和匯點)。這一點的理由顯然,我們要在整條路徑上加上一個值,我們在意的是剩餘最小的邊能否容納這個值。再此基礎上希望這個值最大,那麼我們就要選擇路徑中殘餘量的最小值。

    概念3:割。我們可以近似的認爲割就是一種分配方式。我們把網絡分成兩個集合。這兩個集合由許多邊連接。如果我們去掉割集中的邊,就無法從一個集合走到另一個集合。割集中邊的權值和稱爲割的容量。割集有很多個,其中容量最小的割稱爲最小割。

    這篇文章就到這裏,後面我會寫一些相關的模板。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章