負載平衡問題 網路流24題 最大流最小費用

2021-09-13 18:58:04 字數 1389 閱讀 1252

注意題意:環形——不然怎麼也算不明白為什麼樣例是那樣的…… 

發現這道題竟然是一道費用流,是因為移動每乙個貨物可以看成是挪動一次代價為1,這樣子想就可以建邊了,從源點出發到每個節點是每個節點的擁有數,而每個節點到匯點的容量是那個平均數。然後對於每個相鄰的節點連線上邊並且單位流的代價是1。

#include #include #include #include #include #include #include #include #include #include #include #include #define lowbit(x) ( x&(-x) )

#define pi 3.141592653589793

#define e 2.718281828459045

#define inf 0x3f3f3f3f

#define half (l + r)>>1

#define lsn rt<<1

#define rsn rt<<1|1

#define lson lsn, l, mid

#define rson rsn, mid+1, r

#define ql lson, ql, qr

#define qr rson, ql, qr

#define myself rt, l, r

using namespace std;

typedef unsigned long long ull;

typedef long long ll;

const int s = 0, maxn = 107, maxe = 1e3 + 7;

int n, head[maxn], cnt, all, t, pre[maxn], flow[maxn], dist[maxn];

bool inque[maxn];

queueq;

struct eddge

}edge[maxe];

inline void addeddge(int u, int v, int flow, int cost)

inline void _add(int u, int v, int flow, int cost)

bool spfa()}}

}return pre[t] ^ -1;

}int out_put()

ans += flow[t] * dist[t];

}return ans;

}inline void init()

int main()

all /= n;

for(int i=1; i<=n; i++) _add(i, t, all, 0);

printf("%d\n", out_put());

return 0;

}

網路流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也看做相鄰 做法 最小費用最大流 環分紙牌貪心 先求出平均值,比它大的倉庫提供貨物,與源點相連,容量為 庫存量 平均值 對於比它小的倉庫,需要接受貨物,所以與匯點相連。另外,對於相鄰的倉庫,互相連一條 運輸道路 費...