網路流24題10 餐巾計畫問題

2021-08-15 08:12:34 字數 1553 閱讀 3393

最小費用最大流

建圖方式真麻煩 真是網路流裡的泥石流清流啊

老規矩 先建立超源點s和超匯點e

對於每一天 , 我們可以拆成2個點 , 乙個點稱為1號連線s , 另外乙個稱為2號連線e , 流量都是當天餐巾 , 費用0

由於我們可以不洗餐巾所以可以直接連線下一天 (倆一號點連線), 費用為0 , 流量inf(注意邊界)

我們可以買餐巾所以可以直接買直接s連向2號點 流量為inf 費用為**

還可以洗餐布 , 把每天與洗完之後(i + n + day)的那一天的二號點相連 費用為洗餐布費用 流量inf(注意邊界)

#include 

#include

#include

#include

typedef

int trueint;

#define int long long

#define inc(i) (i = -(~i))

#define dec(i) (i = ~(-i))

using

namespace

std;

namespace fast

inline

int read()

}using

namespace fast;

const

int n = 20000 + 7 , m = 2000000 + 7 , inf = 0x3f3f3f3f;

int n , fast_wash_cost , fast_wash_day , slow_wash_cost , slow_wash_day , everyday[n] , buy;//in

int head[n] , node[m] , w[m] , next[m] , tot = 1 , s , e , co[m];//map

int min_cost , dep[n];//others

inline

void add(int u , int v , int flow , int cost)

inline

void build_map()

}struct queue

inline

int top()

inline

void push(int x)

inline

bool full()

inline

void pop()

}q;bool inq[n] , book[n];

inline

bool spfa()}}

}// printf("dep[e] = %lld\n" , dep[e]);

return dep[e] != big;

}inline

int dfs(int u , int lastc)}}

// printf("now = %lld\n" , now);

return now;

}inline

void max_flow()

}}trueint main()

網路流24題10 餐巾計畫問題

題面戳我 題面描述 乙個餐廳在相繼的n天裡,第i天需要ri塊餐巾 i l,2,n 餐廳可以從三種途徑獲得餐巾。1 購買新的餐巾,每塊需p分 2 把用過的餐巾送到快洗部,洗一塊需m天,費用需f分 fm 費用需s分 s輸出樣例 1 64說明 n 2000 ri 10000000 p,f,s 10000 ...

網路流24題 13 餐巾計畫問題

寫網路流寫的頭昏腦漲qaq大概還是太菜了 比較有趣的建圖題 對於每乙個點拆點拆成早晨和晚上分別為 i 和 i 1.s i r,p 每天早晨可以買最多r條新餐巾 一條p分 2.s i r,0 每天用剩下r條髒餐巾 沒有代價 3.i t r,0 每天要用r條乾淨餐巾 沒有代價 4.i i m inf,f...

線性規劃與網路流24 餐巾計畫問題

題目鏈結點這裡 犯了個智障錯誤,找錯找了一上午,最小費用問題,建模對於我這種菜雞有點難想到。大概這樣建模 把第i天,分為2個點 xi和yi 1 從s向每個xi連一條容量為ri,費用為0的邊。2 從每個yi向t連一條容量為ri,費用為0的邊。3 從s向每個yi連一條容量為無窮大,費用為p的邊。4 從每...