P4016 負載平衡問題 費用流

2022-06-06 14:09:11 字數 1489 閱讀 9125

有 \(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 個倉庫的庫...