網路流24題 負載平衡問題

2021-08-21 21:57:32 字數 1393 閱讀 5136

怎麼每天都要被sb錯誤坑半天..建圖的時候竟然忘記了反向邊

這道題我們可以考慮把乙個地方拆成兩個點x1

,y1 x1,

y1

, 從源點向x1

x

1連流量為物品數, 費用0的邊, y1

y

1向匯點連所有物品平均數的邊, 然後每個x1

x

1向對應y1

y

1連流量in

f inf

, 費用

0 0

的邊, 然後對於物品間的運轉, 相鄰的連流量in

f' role="presentation" style="position: relative;">inf

inf, 費用為

0 0

的邊一定要建雙向邊!!!我就是因為這裡wa了很多遍, 例如

1' role="presentation" style="position: relative;">1

1號點能向

n n

號點運輸, 那

n' role="presentation" style="position: relative;">n

n號點肯定也可以向

1 1

號點運輸, 這樣子跑最小費用最大流即可

題目鏈結

#include

#define for(i, a, b) for(register int i = a; i <= b; ++ i)

#define go(x, i) for(register int i = head[x]; i; i = nxt[i])

#define rel(x) ((x - 1) % n + 1)

#define inf (0x3f3f3f3f)

using

namespace

std;

const

int maxn = 200 + 10, maxm = 1e5 + 10;

int n, a[maxn], sum, s, t;

namespace mincost_maxflow

bool spfa()

}vis[k] = false;

}return dis[t] != inf;

}int dfs(int x, int flow)

return used;

}int dinic()

}return res;

}}int main()

mincost_maxflow::dinic(), printf("%d\n", mincost_maxflow::cost);

return

0;}

網路流24題 負載平衡問題

題目描述 g 公司有n 個沿鐵路運輸線環形排列的倉庫,每個倉庫儲存的貨物數量不等。如何用最少搬運量可以使n 個倉庫的庫存數量相同。搬運貨物時,只能在相鄰的倉庫之間搬運。對於給定的n 個環形排列的倉庫的庫存量,程式設計計算使n 個倉庫的庫存數量相同的最少 搬運量。這題我貌似做過的樣子 不過當時的做法是...

網路流24題 負載平衡問題

鏈結 題意 使n個倉庫的庫存量達到平衡所需最小代價,其中移動只能發生在相鄰倉庫 1,n也看做相鄰 做法 最小費用最大流 環分紙牌貪心 先求出平均值,比它大的倉庫提供貨物,與源點相連,容量為 庫存量 平均值 對於比它小的倉庫,需要接受貨物,所以與匯點相連。另外,對於相鄰的倉庫,互相連一條 運輸道路 費...

網路流 24 題 負載平衡

做法 這道題的隱含前提是這個數肯定能被n整除,所以我們一開始就知道每個點是要流出的還是流入的,那麼我們就可以根據這一點對每個點進行分類,將其分成要一定要流出的和要一定流入的,分別與源和匯相對應,即如果他要流出,那麼源點連向它,流量為其多出來的值,費用為0,流入點與匯點同理。同時,每個點還要與其相鄰的...