poj 2195 最小費用最大流,入門模版

2021-08-22 00:23:01 字數 1820 閱讀 3922

最小費用最大流: 即在有向圖中每條邊除了有容量外, 還有花費。 最大流的路徑條數可能不止一條,需要求的就是 花費最小的那一條。 可以將花費視為 權值路徑, 所以每一次增廣 所用的花費就是  源點到匯點的最短距離 * 每次增廣的 流量大小。 以此求得的總費用, 就是達到最大流的最小費用。

題意: 給定一張 n*m 大小的地圖, 圖中的m 代表人 ,h代表房子(人的數量 == 房子的數量), 每走一步花費為1 , 問這些人都各自走到一間房子 需要的最小花費.

思路: 設人數為 cnt1, 房子數為 cnt2, 超級源點為 0, 超級匯點則為 cnt1 + cnt2 + 1; 連線源點到所有的人(容量為1, 花費為0), 在連線所有的房子到匯點(容量為1, 花費為0), 最後連線每個人到每個房子(容量為1, 花費為 兩個點之間的曼哈頓距離)。  題目所求 即為 此形成的圖的 最小費用最大流0

ac**:

#include#include#include#include#includeusing namespace std;

const int maxn = 400;

const int inf = 0x3f3f3f3f;

char mp[maxn][maxn];

struct edge

};int pre[maxn]; ///前驅陣列, 每一次記錄 訪問點i 之前的那一條邊的下標

int minflow[maxn]; ///

vectoredges; ///存放所有邊

vectorg[maxn]; ///鄰接表表頭

int dis[maxn]; ///spfa 的dis (一樣的意義)

int vis[maxn]; ///spfa 的vis (一樣的意義)

void init()

void add(int u,int v,int cap,int cost)

bool spfa(int s,int t,int &cost)}}

}if(dis[t] == inf) return 0; ///已經無法到達匯點

cost += dis[t] * minflow[t]; ///每一次增廣的花費就是 每次增廣的流量大小 * 最短路徑

int u = t;

while(u != s)

return 1;

}int min_cost_maxflow(int s,int t)

int main()

s1[maxn], s2[maxn];

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

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

add(0,i + 1,1,0); ///相當於給人編號, 編號為 1 -- cnt1, 並連線

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

add(cnt1 + i + 1,cnt1 + cnt2 + 1,1,0);

for(int i = 0;i < cnt1;i ++) ///相當於給房子編號, 為 cnt1 + 1 到 cn1 + cnt2, 並連線

for(int j = 0;j < cnt2;j ++)

add(i + 1,cnt1 + j + 1,1,abs(s1[i].x - s2[j].x) + abs(s1[i].y - s2[j].y)); ///連線人與房子

printf("%d\n",min_cost_maxflow(0,cnt1 + cnt2 + 1));

}return 0;

}

poj 2195 最小費用最大流

題意 給出一張圖,m代表人,h代表house,問所以的人走到house裡的最小花費 每步花費1 5 5 hh.m mm.h簡單題目直接 include include include include includeusing namespace std const int m 102 const i...

poj 2195 最小費用最大流

題意 n個人和m個房子,每個房子中要安排乙個人,每個人移動一步費用為1,所有人安排房子後需要的金錢的最小值。曼哈頓距離 例如在平面上,座標 x1,y1 的i點與座標 x2,y2 的j點的曼哈頓距離為 d i,j x1 x2 y1 y2 建圖 網路流,建乙個超源 0,超匯 e 1 超源 0 到 所有人...

POJ 2195 最小費用最大流

題目大意 給定一張網格圖,每個人需要回到乙個房子裡並且乙個房子只能容納乙個人,問所有人加起來的最短路徑是多少 題目解析 看到匹配,肯定是網路流了,有個坑點,題目說只要進入乙個房子就不能走了,照道理有的房子是走不到的應該要bfs,然而並沒有,構圖簡單不多說 ac include include inc...