這道題直接用了模板
題意:要構建乙個二分圖,家對應人,連線的權值就是最短距離,求最小費用
要注意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中的每條邊 ...