HDU 6118 度度熊的交易計畫 最小費用可行流

2021-08-06 04:47:26 字數 1458 閱讀 9004

problem description

度度熊參與了喵哈哈村的商業大會,但是這次商業大會遇到了乙個難題:

喵哈哈村以及周圍的村莊可以看做是一共由n個片區,m條公路組成的地區。

由於生產能力的區別,第i個片區能夠花費a[i]元生產1個商品,但是最多生產b[i]個。

同樣的,由於每個片區的購買能力的區別,第i個片區也能夠以c[i]的****最多d[i]個物品。

由於這些因素,度度熊覺得只有合理的調動物品,才能獲得最大的利益。

據測算,每乙個商品運輸1公里,將會花費1元。

那麼喵哈哈村最多能夠實現多少盈利呢?

input

本題包含若干組測試資料。

每組測試資料報含:

第一行兩個整數n,m表示喵哈哈村由n個片區、m條街道。

接下來n行,每行四個整數a[i],b[i],c[i],d[i]表示的第i個地區,能夠以a[i]的**生產,最多生產b[i]個,以c[i]的****,最多**d[i]個。

接下來m行,每行三個整數,u[i],v[i],k[i],表示該條公路連線u[i],v[i]兩個片區,距離為k[i]

可能存在重邊,也可能存在自環。

滿足:

1<=n<=500,

1<=m<=1000,

1<=a[i],b[i],c[i],d[i],k[i]<=1000,

1<=u[i],v[i]<=n

一眼看上去就長的像個費用流。此題求得是最大費用,那麼我們將真正的費用取反去求最小,然後再取反就是最大費用了。建圖時,從源點向每個點連邊,費用為a[

i],流量為b[

i],從每個點向匯點連邊,費用為−c

[i] ,流量為d[

i],對於每條公路,在公路連線的兩個片區間連邊,費用為k[

i]。建完後跑乙個最小費用可行流即可,重邊和自環不會影響費用流的正確答案

#include 

using

namespace

std;

typedef

long

long ll;

const

int n = 500 + 10, inf = 0x3f3f3f3f;

struct edge

g[n*n*10];

int cnt, head[n];

int dis[n], pre[n];

bool vis[n];

void add_edge(int v, int u, int cap, int cost)

void spfa(int s, int t)}}

}int cost_flow(int s, int t)

}int main()

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

printf("%d\n", -cost_flow(ss, tt));

}return

0;}

hdu 6080 度度熊保護村莊

嘩啦啦村襲擊了喵哈哈村!度度熊為了拯救喵哈哈村,帶著自己的夥伴去救援喵哈哈村去了!度度熊與夥伴們很快的就過來佔據了喵哈哈村的各個軍事要地,牢牢的守住了喵哈哈村。但是度度熊發現,這是一場曠日持久的戰鬥,所以度度熊決定要以逸待勞,儲存盡量多的體力,去迎戰嘩啦啦村的戰士。於是度度熊決定派盡量多的人去休息,...

HDU 6375 度度熊學佇列

danshlem description 度度熊正在學習雙端佇列,他對其翻轉和合併產生了很大的興趣。初始時有 n 個空的雙端佇列 編號為 1 到 n 你要支援度度熊的 q 次操作。1 u w val 在編號為 u 的佇列裡加入乙個權值為 val 的元素。w 0 表示加在最前面,w 1 表示加在最後面...

hdu6376 度度熊剪紙條

度度熊有一張紙條和一把剪刀。紙條上依次寫著 n 個數字,數字只可能是 0 或者 1。度度熊想在紙條上剪 k 刀 每一刀只能剪在數字和數字之間 這樣就形成了 k 1 段。他再把這 k 1 段按一定的順序重新拼起來。不同的剪和接的方案,可能會得到不同的結果。度度熊好奇的是,字首 1 的數量最多能是多少。...