洛谷P3965 迴圈格 費用流

2021-09-25 01:53:53 字數 1438 閱讀 4429

乙個完美的迴圈格是這樣定義的:對於任意乙個起始位置,你都可以沿著箭頭最終回到起始位置。如果乙個迴圈格不滿足完美,你可以隨意修改任意乙個元素的箭頭直到完美。例如下圖,左邊不是乙個完美的迴圈格,因為只有從(1,

1),(

1,2)

,(2,

0),(

2,3)

(1,1),(1,2),(2,0),(2,3)

(1,1),

(1,2

),(2

,0),

(2,3

)出發才會回到起始位置。通過修改其中兩個箭頭,可以得到右圖,乙個完美的迴圈格。

給定乙個迴圈格,你需要計算最少需要修改多少個元素使其完美。

一眼題啊,最多藍題。題解和標籤都沒看就過了。

先證明完美迴圈格所有的點入度為1。

所以我們可以大膽猜想,所有點入度均為1的圖就是完美的。

所以可以把所有點拆成入點和出點,出點向四周的入點連邊,若和原來的方向一致則費用為0,否則費用為1。

源點連向所有出點,所有入點連向匯點。圖中所有邊流量為1。顯然這個圖的最大流是n×m

n\times m

n×m,所以可以保證最終的費用答案是可以滿足條件的。

#include

#include

#include

using

namespace std;

const

int n=

1010

,m=50010

,inf=

1e9;

const

char way=

;int n,m,tot=

1,s,t,cost,head[n]

,dis[n]

,pre[n]

;bool vis[n]

;char ch;

struct edge

e[m]

;intc(

int x,

int y)

void

add(

int from,

int to,

int flow,

int cost)

bool

spfa()

}}}return dis[t]

}void

addflow()

cost+

=dis[t]

*minflow;

}int

mcmf()

intmain()

}mcmf()

;printf

("%d\n"

,cost)

;return0;

}

洛谷P4043 費用流

這題的建圖方式可以模擬洛谷p1251 我是由那個題才想到這麼建的,由於每條邊至少經過一次,我們又不清楚需要跑多少次,把邊看成點,點與匯點相連,可是我們又不知道最大流應該是多少,直接這麼連會發生錯誤。利用那道題的思想,每條邊最少需要一次,那麼就每條邊看做兩個點,點1和點2,點1有1的流量流向匯點,點2...

最小費用流 洛谷P2053

傳送門 教練我想學數學建模。網路流和最小費用流的題目不存在 難度,不存在變形 目前來說是的,不知道是不是我沒做過對於模板修改的題目 難度主要在於,你能看出來它是個網路流,並且還能正確的建模。大喊一句,教練我想學數學建模!這個題目建模不是很簡單。首先,我們要知道乙個人可以修n輛車,那麼m個人就可以修n...

洛谷P3381 Dijkstra版費用流

鑑於spfa很容易被卡,所以學了一手dij跑費用流 具體參考 雖然有個小地方少了個負號,不過還好 區別就是把 u v 邊權變成cost h u h v 先用spfa算出dis當h i 然後每次跑完mcf,由於負權邊的容量可能增加能選了,就要h i dis i 這樣動態維護,就能保證每條邊都是正的 i...