日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

网络流24题之餐巾计划问题

發(fā)布時(shí)間:2025/3/15 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 网络流24题之餐巾计划问题 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

題目鏈接:傳送門

時(shí)間有點(diǎn)趕,所以寫的簡(jiǎn)略一些了.

dalao:這道題不是看看就出來(lái)了嗎?
me:這道題十分難想啊!!!!圖好難建啊!!!!但是想到以后就是一個(gè)裸題啊!!

要拆點(diǎn),將每天拆為早上和晚上(干凈的和臟的).
如果不會(huì)拆點(diǎn)的話,你可以立即去世了,寫網(wǎng)絡(luò)流的題怎么能不會(huì)拆點(diǎn)呢?這是學(xué)網(wǎng)絡(luò)流必備的啊

  • 建立源點(diǎn)匯點(diǎn).(廢話,那個(gè)網(wǎng)絡(luò)流的題不要建)
  • 源點(diǎn)向每天晚上連一條邊,流量為當(dāng)天所需的紙巾數(shù),費(fèi)用為0。
  • 匯點(diǎn)向每天早上連一條邊,流量為當(dāng)天所需的紙巾數(shù),費(fèi)用為0。
  • 每天晚上向明天晚上連一條邊,流量為inf,費(fèi)用為0(將當(dāng)天的臟紙巾留到明天).
  • 連快洗店,慢洗店的邊.從當(dāng)天晚上向過(guò)x天(洗紙巾的天數(shù))后那一天早上連一條邊,流量為inf,費(fèi)用為洗紙巾的費(fèi)用.
  • 連買新紙巾的邊,從源點(diǎn)向每天早連一條邊,流量為inf,費(fèi)用為買新紙巾所需費(fèi)用。

理由呢......自己對(duì)著這個(gè)看看吧,應(yīng)該可以明白的.

注意判邊界啊

注意開long long 啊

#include<bits/stdc++.h> #define int long long const int inf=1e15; using namespace std; typedef long long ll; int read() {int x=0,f=1;char c=getchar();while(c<'0'||c>'9')f=(c=='-')?-1:1,c=getchar();while(c>='0'&&c<='9')x=x*10+c-'0',c=getchar();return x*f; } struct node {int to,next,v,w; } a[1000001]; int dis[10001],f[10001],pre[10001],fa[10001],s,t,n,m,head[10001],cnt,x,y,z,c; void add(int x,int y,int c,int v) {a[++cnt].to=y;a[cnt].next=head[x];a[cnt].v=c;a[cnt].w=v;head[x]=cnt; } queue < int > q; int spfa() {q.push(s);memset(dis,127,sizeof(dis));memset(f,0,sizeof(f));f[s]=1,dis[s]=0;int inf1=dis[s+1];while(!q.empty()) {int now=q.front();q.pop();f[now]=0;for(int i=head[now]; i; i=a[i].next) {int v=a[i].to;if(dis[v]>dis[now]+a[i].w&&a[i].v) {dis[v]=dis[now]+a[i].w,pre[v]=i,fa[v]=now;if(!f[v])f[v]=1,q.push(v);}}}if(dis[t]!=inf1)return 1;return 0; } int ans1,ans; void anser() {while(spfa()) {int minx=inf;for(int i=t; i!=s; i=fa[i])minx=min(minx,a[pre[i]].v);ans+=minx,ans1+=dis[t]*minx;for(int i=t; i!=s; i=fa[i])a[pre[i]].v-=minx,(pre[i]%2)?a[pre[i]+1].v+=minx:a[pre[i]-1].v+=minx;} } int a1[20001]; main() {n=read();int p,m,f,nn,ss,pp;ss=0,t=n*2+1;for(int i=1; i<=n; i++)a1[i]=read();for(int i=1; i<=n; i++)add(s,i,a1[i],0),add(i,s,0,0);for(int i=1; i<=n; i++)add(i+n,t,a1[i],0),add(t,i+n,0,0);p=read(),m=read(),f=read(),nn=read(),ss=read();for(int i=1; i<=n; i++)if(i+n+1<t)add(i+n,i+n+1,inf,0),add(i+n+1,i+n,0,0); for(int i=1; i<=n; i++)if(i+m+n<t)add(i,i+n+m,inf,f),add(i+n+m,i,0,-f);for(int i=1; i<=n; i++)if(i+nn+n<t)add(i,i+nn+n,inf,ss),add(i+nn+n,i,0,-ss);for(int i=1; i<=n; i++)add(s,i+n,1000000,p),add(i+n,s,0,-p);anser();printf("%lld",ans1); }

轉(zhuǎn)載于:https://www.cnblogs.com/hbxblog/p/9733584.html

總結(jié)

以上是生活随笔為你收集整理的网络流24题之餐巾计划问题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。