luogu P4016 負載平衡問題

2022-08-19 23:21:15 字數 1175 閱讀 6656

本題有數學貪心解法和費用流解法

數學解法就看看luogu題解吧,窩太菜了

費用流就找建圖法,依舊是設超級源點和匯點,初始資料就源點s向該點連點,流量就是初始量,代價為0,然後每個倉庫向相鄰的點連邊,容量無限大,代價為1,再每個倉庫向匯點連點,容量就是sum/n,代價為0,直接跑最大流最小費就行了,這樣能保證源點出的匯點全進

typedef long

long

ll;typedef pair

pll;

typedef pair

pint;

const

int maxm = 2000+5

;const

int inf = 0x3f3f3f3f

;struct

edge edges[maxm];

inthead[maxm], cur[maxm], cnt, fa[maxm], d[maxm], n;

bool

inq[maxm];

void

init()

void addedge(int u, int v, int cap, int

cost) ;

head[u] = cnt++;

}bool spfa(int s, int t, int &flow, ll &cost) }}

}if(d[t] == inf) return

false

; flow +=cur[t];

cost += 1ll*d[t]*cur[t];

for(int u = t; u != s; u =edges[fa[u]].u)

return

true;}

int mincostmaxflow(int s, int t, ll &cost)

void

run_case()

sum /=n;

for(int i = 1; i <= n; ++i)

addedge(i, t, sum,

0), addedge(t, i, 0, 0

); ll cost = 0

; mincostmaxflow(s, t, cost);

cout

<

}int

main()

view code

LUOGU P4016 負載平衡問題

題目描述 gg 公司有 nn 個沿鐵路運輸線環形排列的倉庫,每個倉庫儲存的貨物數量不等。如何用最少搬運量可以使 nn 個倉庫的庫存數量相同。搬運貨物時,只能在相鄰的倉庫之間搬運。輸入輸出格式 輸入格式 檔案的第 11 行中有 11 個正整數 nn 表示有 nn 個倉庫。第 22 行中有 nn 個正整...

LuoguP4016 負載平衡問題 費用流

g 公司有 n個沿鐵路運輸線環形排列的倉庫,每個倉庫儲存的貨物數量不等。如何用最少搬運量可以使 n個倉庫的庫存數量相同。搬運貨物時,只能在相鄰的倉庫之間搬運。輸入格式 檔案的第 11 行中有 11 個正整數 n,表示有 n個倉庫。第 22 行中有 n個正整數,表示 n個倉庫的庫存量。輸出格式 輸出最...

P4016 負載平衡問題

方法二 p4016 負載平衡問題 g 公司有 n 個沿鐵路運輸線環形排列的倉庫,每個倉庫儲存的貨物數量不等。如何用最少搬運量可以使 n 個倉庫的庫存數量相同。搬運貨物時,只能在相鄰的倉庫之間搬運。輸入格式 第一行乙個正整數 n,表示有 n 個倉庫。第二行 n 個正整數,表示 n 個倉庫的庫存量。輸出...