HDU 1533 最小費用最大流(模板)

2022-08-02 10:39:10 字數 1647 閱讀 1442

這道題直接用了模板

題意:要構建乙個二分圖,家對應人,連線的權值就是最短距離,求最小費用

要注意void init(int n) 這個函式一定要寫

一開始忘記寫這個wa了好幾發

還有這個題很容易t掉,賦值建圖要簡化,一開始構建成網路流那種圖一直t

#include #include 

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define oo 0x13131313

using

namespace

std;

const

int inf = 0x3f3f3f3f

;const

int maxn=400

;const

int maxm=200000

;struct

edge

edge[maxm];

inthead[maxn],tol;

intpre[maxn],dis[maxn];

bool

vis[maxn];

intn;

void init(int

n)void addedge(int u,int v,int cap,int

cost)

bool spfa(int s,int

t) dis[s] = 0

; vis[s] = true

; q.push(s);

while(!q.empty())}}

}if(pre[t] == -1)return

false

;

else

return

true;}

int mincostmaxflow(int s,int t,int &cost)

for(int i = pre[t]; i != -1; i = pre[edge[i^1

].to])

flow +=min;

}return

flow;

}struct

home

h[maxn],p[maxn];

intmain()

getchar();

}int ans=0

;

int nnn=totp+toth;

for(int i=1; i<=totp; i++)

for(int j=1; j<=toth; j++)

for(int i=1; i<=totp; i++)

addedge(nnn+1,i,1,0

);

for(int i=totp+1; i<=nnn; i++)

addedge(i,nnn+2,1,0

); mincostmaxflow(nnn+1,nnn+2

,ans);

printf(

"%d\n

",ans);

}return0;

}

hdu 1533 最小費用最大流

解題思路 首先要知道怎麼寫最大流,不懂的可以先轉個場 網路流 那麼最小費用最大流就是現在每個邊不只有容量了,還有乙個花費,就是單位流量流過要的花費。要求你求出在最大流的情況下的最小花費,所以之前我們再求最大流不考慮花費的情況下,只要能達到最大流就可以了,並不用去考慮流量是走哪些邊的,現在就是要考慮了...

hdu 1533 最小費用最大流模板題

這一題雖然說是模板題,但作為學習了最小費用最大流過程之後的第一題,模型的建立還是一臉懵比,之後通過見識相關的變形再來磨練建模的能力吧 如下是網上題解中關於本題中網路流的建模 1.所有人到所有的房子均建容量為1,費用為人到房子的曼哈頓距離的流 2.建立超級源點s,s到所有人均建容量為1,費用為0的流 ...

最小費用最大流

網 絡流的基本問題為 設乙個有向賦權圖g v,e v 其中有兩個特殊的節點s和s s稱為發點,s 稱為收點。圖中各 邊的方向和權數表示允許的流向和最大可能的流量 容量 問在這個網路圖中從發點流出到收點匯集,最大可通過的實際流量為多少?流向的分布情況為怎樣?設有乙個網路圖g v,e v e中的每條邊 ...