洛谷 網路流24題 負載平衡問題

2021-10-02 14:17:31 字數 1330 閱讀 8650

初見安~今天多寫幾篇。這裡是傳送門:洛谷p4016 負載平衡問題

網路流24題原來還有這麼水的題啊。本來是懶得寫題解的……整整齊齊24題還是寫吧。

每個倉庫都有初始庫存,相當於從s向每個倉庫連一條容量為初始值的邊。而後總庫存均分給這些倉庫,所以從每個倉庫向t連一條容量為均值的邊。因為容量的分配是確定的,所以我們寫乙個費用流,這個題就是最小費用流。前面到s和t的費用都是0,接下來考慮運輸。運輸的話環形可以往左運輸也可以往右運輸,【我也不確定但是感覺會出鍋】為了避免出鍋,我們還是把每個點拆成兩個,乙個表示初始庫存由s發出,乙個負責接收運輸連向t。從初始庫存向相鄰倉庫的接收點連費用為1的邊,然後跑最小費用流。就沒了。

因為總流入等於總匯入,所以題意下不會有流量損失。

上**——

#include#include#include#include#include#include#define maxn 300

#define maxm 20000

using namespace std;

typedef long long ll;

const int inf = 0x3f3f3f3f;

int read()

while(isdigit(ch)) x = (x << 1) + (x << 3) + ch - '0', ch = getchar();

return x * f;

}struct edge e[maxm];

int head[maxn], k = 0;

void add(int u, int v, int w, int f) ; head[u] = k++;

e[k] = ; head[v] = k++;

}int s, t, dis[maxn], pre[maxn], incf[maxn];

bool vis[maxn];

bool spfa()

} }if(dis[t] == inf) return false; return true;

}ll ans = 0;

void update()

ans += 1ll * incf[t] * dis[t];

}int n, a[maxn];

signed main()

while(spfa()) update();

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

return 0;

}

迎評:)

——end——

網路流24題 負載平衡問題

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

網路流24題 負載平衡問題

怎麼每天都要被sb錯誤坑半天.建圖的時候竟然忘記了反向邊 這道題我們可以考慮把乙個地方拆成兩個點x1 y1 x1,y1 從源點向x1 x 1連流量為物品數,費用0的邊,y1 y 1向匯點連所有物品平均數的邊,然後每個x1 x 1向對應y1 y 1連流量in f inf 費用 0 0 的邊,然後對於物...

網路流24題 負載平衡問題

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