有 \(n \le 100\) 個沿鐵路運輸線環形排列的倉庫,每個倉庫儲存的貨物數量不等。如何用最少搬運量可以使 n 個倉庫的庫存數量相同。搬運貨物時,只能在相鄰的倉庫之間搬運。
費用流模型,每個倉庫建乙個點,各個倉庫之間相互連邊,費用為 1,倉庫與源連邊,流量按照題意設定,倉庫與匯點連邊,流量是最終的平均流量。
#include using namespace std;
#define int long long
#ifndef __flow_hpp__
#define __flow_hpp__
// v1.1 feat. edge query for maxf
#include using namespace std;
#define int long long
namespace flowsolution
~maxflowsolution()
std::queueq;
int make(int x, int y, int z)
int get_value(int x)
bool bfs()
return dis[t];
}int dfs(int x, int flow)
if (f == flow)
dis[x] = -1;
return flow - f;
}int solve(int _s, int _t)
};struct costflowsolution
* e;
int s, t, tans, ans, cost, ind, *bus, qhead = 0, qtail = -1, *qu, *vis, *dist;
costflowsolution()
~costflowsolution()
void graph_link(int p, int q, int c, int w)
void make(int p, int q, int c, int w)
int dinic_spfa()
}return dist[t] < inf;
}int dinic_dfs(int p, int lim)
}return ret;
}pairsolve(int _s, int _t)
return make_pair(ans, cost);}};
} // namespace flowsolution
#endif
signed main()
sum /= n;
int s = n + 1, t = n + 2;
flowsolution::costflowsolution flow;
for (int i = 1; i <= n; i++)
auto [ans, cost] = flow.solve(s, t);
cout << cost << endl;
}
洛谷P4016 負載平衡問題(費用流)
這題是網路流24題中的一道相對簡單的題。既然是網路流題,我們先考慮怎麼建圖。讀入各倉庫貨物數 a i 求出平均值 frac 我們就知道每乙個倉庫需要調入 調出多少貨物,令 f i a i frac 新建乙個源點s和乙個匯點t,對於任意的 i 若 f i 0 說明該倉庫要向其他倉庫調出貨物,我們加入一...
P4016 負載平衡問題
方法二 p4016 負載平衡問題 g 公司有 n 個沿鐵路運輸線環形排列的倉庫,每個倉庫儲存的貨物數量不等。如何用最少搬運量可以使 n 個倉庫的庫存數量相同。搬運貨物時,只能在相鄰的倉庫之間搬運。輸入格式 第一行乙個正整數 n,表示有 n 個倉庫。第二行 n 個正整數,表示 n 個倉庫的庫存量。輸出...
P4016 負載平衡問題 網路流
gg 公司有 nn 個沿鐵路運輸線環形排列的倉庫,每個倉庫儲存的貨物數量不等。如何用最少搬運量可以使 nn個倉庫的庫存數量相同。搬運貨物時,只能在相鄰的倉庫之間搬運。輸入格式 檔案的第 11 行中有 11 個正整數 nn,表示有 nn 個倉庫。第 22 行中有 nn 個正整數,表示 nn 個倉庫的庫...