一道建模稍微有難度的網路流,首先你需要考慮到拆點,確實有點難度,你需要把一天拆成乾淨餐巾和骯髒餐巾,因為髒餐巾是可以轉化為乾淨餐巾的,你需要做到這個過程,所以你需要拆點,其次難想到的應該是如何解決快洗部和慢洗部每次只能洗一件並且需要洗多天,如何安排哪天的餐巾去洗就是個問題,所以可以考慮每天的餐巾都可以留到下一天,多連一條這樣的邊就可以解決這個問題了,別的都很好想了,至此解決。
#include#include#includeusing namespace std;
void read(int &x)
#define min(a,b) (a#define rg register
int ss,tt,p,m,f,k,s,n,inf=1e9,cnt=1,sla[3000001],dis[30001],pre[300001],nxt[300001],v[300001],w[300001],h[300001],r[2001];
bool vis[10001];long long ans;
inline void add(int x,int y,int z,int u)
inline int dfs(int x,int flow)
int f=flow;vis[x]=1;
for(rg int i=h[x];i;i=nxt[i])
if(v[i]&&!vis[pre[i]])
else sla[pre[i]]=min(sla[pre[i]],dis[x]+w[i]-dis[pre[i]]);
}return flow-f;
}inline int aug()
int main()
memset(sla,127,sizeof sla);
while(1)
if(aug())break;
}printf("%lld\n",ans);
}
網路流24題 餐巾計畫問題
傳送門 這個題我一開始沒把tot賦值成 1,然後調了1h。然後只拿了20,看了題解才知道漏了一種情況,那就是其實餐巾是可以留到第二天的。然後就沒了。對了,忘說做法了 尷尬 其實就是拆點,分別連邊,實現題目中的三種操作,具體可以看我的 include include include include i...
網路流24題餐巾計畫問題
乙個餐廳在相繼的 n n 天裡,每天需用的餐巾數不盡相同。假設第 i role presentation i i天需要 ri r i塊餐巾 i 1,2,n 餐廳可以購買新的餐巾,每塊餐巾的費用為 p p 分 或者把舊餐巾送到快洗部,洗一塊需 m 天,其費用為 f 分 或者送到慢洗部,洗一塊需 n r...
網路流24題 餐巾計畫問題
description 乙個餐廳在相繼的 n 天裡,每天需用的餐巾數不盡相同,假設第 i 天需要 r i 塊餐巾 i in 1,n 餐廳可以購買新的餐巾,每塊餐巾的費用為 p 分 或者把舊餐巾送到快洗部,洗一塊需 m 天,其費用為 f 分 或者送到慢洗部,洗一塊需 n 天 n m 其費用為 w w ...