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

2021-07-23 16:36:19 字數 1367 閱讀 4986

這一題雖然說是模板題,但作為學習了最小費用最大流過程之後的第一題,模型的建立還是一臉懵比,之後通過見識相關的變形再來磨練建模的能力吧

如下是網上題解中關於本題中網路流的建模:

1.所有人到所有的房子均建容量為1,費用為人到房子的曼哈頓距離的流

2.建立超級源點s,s到所有人均建容量為1,費用為0的流

3.建立超級匯點t,所有房子到t均建容量為1,費用為0的流

#include

using

namespace

std;

const

int inf = 0x3f3f3f3f;

const

int maxn = 105*2;

int n,m;

char f[105][105];

struct node

}man[105],house[105];

struct edge

};struct mcmf

void addedge(int from, int to, int cap, int cost)

bool bellmanford(int s, int t, int& flow, long

long& cost)}}

}if(d[t] == inf) return

false;

flow += a[t];

cost += (long

long)d[t] * (long

long)a[t];

for(int u = t; u != s; u = edges[p[u]].from)

return

true;

}int mincostmaxflow(int s, int t, long

long& cost)

};mcmf mc;

int main()

int p = 0, q = 0;

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

else

if(f[i][j] == 'h')}}

mc.init(p+q+2);

for(int i = 0; i < p; ++i)

}for(int i = 0; i < p; ++i)

mc.addedge(p+q,i,1,0);

for(int i = p; i < p+q; ++i)

mc.addedge(i,p+q+1,1,0);

long

long ans;

mc.mincostmaxflow(p+q,p+q+1,ans);

printf("%lld\n",ans);

}return

0;}

hdu 1533 最小費用最大流

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

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

這道題直接用了模板 題意 要構建乙個二分圖,家對應人,連線的權值就是最短距離,求最小費用 要注意void init int n 這個函式一定要寫 一開始忘記寫這個wa了好幾發 還有這個題很容易t掉,賦值建圖要簡化,一開始構建成網路流那種圖一直t include include include inc...

最小費用最大流

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