圖論算法的數學模型

[TOC]算法

圖論算法的數學模型

今天聽敦敦敦的課總結一下...網絡

前置芝士:網絡流,最小割spa

引入:最短路的數學形式

鬆弛操做:數學

對於一條邊$(u,v,w)$,$\text {if}~(dis_u+w(u,v)<dis_v)~\text{then}~dis_v=dis_u+w(u,v)$變量

因此對於求出來的dis,有$dis_v\leq dis_u+w(u,v)$對吧。。。 那麼這和差分約束中$x_i-x_j\leq a_k$是對應的,就能夠從$~j~$連到$~i~$一條權值爲$~a_k~$的邊 這也給了咱們一個啓發:若是能把要求的貢獻/條件轉化爲圖論算法要求的形式,數學問題也能夠解決方法

最小割的數學形式

考慮對於$~01~$變量$~x~$,令$x=0$則與源點聯通,$x=1$則與匯點聯通總結

考慮邊$(S,x,a)$,即從源點向$x$連了流量爲$a$的邊對最小割的貢獻 那麼僅當$~x~$連與匯點聯通時才能算把這條邊割掉的貢獻,此時$x=1$di

那麼就能夠簡單地把答案表示爲$a*x$block

一樣地,對於邊$(x,T,a)$,答案即爲$a*(1-x)$模型

最後考慮邊$(x,y,a)$,注意是有向邊 那麼這條邊要被割掉僅當$x$與源點聯通,$y$與匯點聯通,貢獻即爲$a(1-x)y$

求最小割的本質就是給x賦值對吧 那麼咱們把要求的貢獻表示成這三種形式,不就能夠經過最小割算出最小的貢獻了? (最大割是np問題~)

來看一道例題吧:

ZROJ1209

放心大家找不到

說下題意:

有一個 $n×m$ 的方格,一開始全部格子都是白色的,你的最終目的是把方格塗成你想要的顏色

你有三種刷的方法:

  • 橫着刷連續的 $k$ 格,代價是 $ak+b$
  • 豎着刷連續的 $k$ 格,代價是 $ak+b$
  • 只刷某個格子,代價是 $c$

每一個格子的顏色是最後刷它的那個刷子的顏色,可是有如下幾個限制:

  • 每一個格子最多隻能被刷兩次,不管這些刷子是否同色
  • 每一個格子不能先刷白色刷子再刷黑色刷子,由於白色染料比較特殊,這會致使格子變成灰色,可是你能夠先刷黑色刷子再刷白色刷子,也能夠在一開始格子是初始顏色白色時刷黑色刷子

如今你須要求出,刷出指定顏色的最小代價

有個結論:不會被橫刷子塗兩次,這樣不是白給嗎

由於最開始都是白的,咱們考慮先刷黑的,再刷白的,最後刷單點,這樣必定最優

設$bh[x][y]$表示 (x,y)是否被橫着的黑刷子刷了,$wv[x][y]$ 表示是否被豎着的白刷子刷了 而後設$\text{_bv[x][y]}$表示1-(x,y)是否被豎着的黑刷子刷了,$\text{_wh[x][y]}$表示是否被橫着的白刷子刷了 這樣設是爲了表示答案方便,好用最小割求解

考慮橫豎刷子的代價$ak+b$ ,能夠把a攤到每一個格子上,b算到最後一個格子 那麼橫着的黑刷子對每一個點的貢獻就是$bh[x][y]a+bbh[x][y]*(1-bh[x][y+1])$ 其餘的同理,顯然符合最小割的貢獻形式

考慮單點的代價,被單點修改僅當沒有被刷子刷過 黑格子貢獻:$c*(1-bh[x][y])(\text{_bv[x][y]})$ 又由於不能被白的刷過,貢獻$infwv[x][y]+inf*(1-\text{_wh[x][y]})$

那麼白格子單點貢獻:以前塗了黑但沒被塗白 $cbh[x][y](1-wv[x][y])+x*(1-\text{_bv[x][y]})\text{_wh[x][y]}$ 並且不能被黑刷子刷兩次:$infbh[x][y]*\text{(1-_bv[x][y])}$

而後對應連點,求最小割,就作完了

一些沒用的總結

因此對於一些難抽象出圖論模型的最小割題,能夠轉化成數學模型作,具體就是設設變量而後看看形式對不對應,變量能夠設兩種形式

好比有一道著名的文理分科題,你想一想不就是設每一個點選文仍是選理,二分圖染色設變量爲x或1-x,貢獻分別就是$ax,a(1-x)$,組合的貢獻就是$c(x)(1-y),c(1-x)y$這樣討論嗎?

相關文章
相關標籤/搜索