怎麼每天都要被sb錯誤坑半天..建圖的時候竟然忘記了反向邊
這道題我們可以考慮把乙個地方拆成兩個點x1
,y1 x1,
y1
, 從源點向x1
x
1連流量為物品數, 費用0的邊, y1
y
1向匯點連所有物品平均數的邊, 然後每個x1
x
1向對應y1
y
1連流量in
f inf
, 費用
0 0
的邊, 然後對於物品間的運轉, 相鄰的連流量in
f' role="presentation" style="position: relative;">inf
inf, 費用為
0 0
的邊一定要建雙向邊!!!我就是因為這裡wa了很多遍, 例如
1' role="presentation" style="position: relative;">1
1號點能向
n n
號點運輸, 那
n' role="presentation" style="position: relative;">n
n號點肯定也可以向
1 1
號點運輸, 這樣子跑最小費用最大流即可
題目鏈結
#include
#define for(i, a, b) for(register int i = a; i <= b; ++ i)
#define go(x, i) for(register int i = head[x]; i; i = nxt[i])
#define rel(x) ((x - 1) % n + 1)
#define inf (0x3f3f3f3f)
using
namespace
std;
const
int maxn = 200 + 10, maxm = 1e5 + 10;
int n, a[maxn], sum, s, t;
namespace mincost_maxflow
bool spfa()
}vis[k] = false;
}return dis[t] != inf;
}int dfs(int x, int flow)
return used;
}int dinic()
}return res;
}}int main()
mincost_maxflow::dinic(), printf("%d\n", mincost_maxflow::cost);
return
0;}
網路流24題 負載平衡問題
題目描述 g 公司有n 個沿鐵路運輸線環形排列的倉庫,每個倉庫儲存的貨物數量不等。如何用最少搬運量可以使n 個倉庫的庫存數量相同。搬運貨物時,只能在相鄰的倉庫之間搬運。對於給定的n 個環形排列的倉庫的庫存量,程式設計計算使n 個倉庫的庫存數量相同的最少 搬運量。這題我貌似做過的樣子 不過當時的做法是...
網路流24題 負載平衡問題
鏈結 題意 使n個倉庫的庫存量達到平衡所需最小代價,其中移動只能發生在相鄰倉庫 1,n也看做相鄰 做法 最小費用最大流 環分紙牌貪心 先求出平均值,比它大的倉庫提供貨物,與源點相連,容量為 庫存量 平均值 對於比它小的倉庫,需要接受貨物,所以與匯點相連。另外,對於相鄰的倉庫,互相連一條 運輸道路 費...
網路流 24 題 負載平衡
做法 這道題的隱含前提是這個數肯定能被n整除,所以我們一開始就知道每個點是要流出的還是流入的,那麼我們就可以根據這一點對每個點進行分類,將其分成要一定要流出的和要一定流入的,分別與源和匯相對應,即如果他要流出,那麼源點連向它,流量為其多出來的值,費用為0,流入點與匯點同理。同時,每個點還要與其相鄰的...