初見安~今天多寫幾篇。這裡是傳送門:洛谷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也看做相鄰 做法 最小費用最大流 環分紙牌貪心 先求出平均值,比它大的倉庫提供貨物,與源點相連,容量為 庫存量 平均值 對於比它小的倉庫,需要接受貨物,所以與匯點相連。另外,對於相鄰的倉庫,互相連一條 運輸道路 費...