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

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

生活随笔

當(dāng)前位置: 首頁(yè) >

p2762-太空飞行计划问题【网络流,最大权闭合图,最小割】

發(fā)布時(shí)間:2023/12/3 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 p2762-太空飞行计划问题【网络流,最大权闭合图,最小割】 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

正題

AC評(píng)測(cè)記錄鏈接:
https://www.luogu.org/record/show?rid=7965757


大意

nn個(gè)實(shí)驗(yàn),有mm個(gè)實(shí)驗(yàn)器材的集合GG。完成第ii個(gè)實(shí)驗(yàn)可以獲得cici元,第ii個(gè)實(shí)驗(yàn)需要器材集合SiSiSi?GSi?G。第ii個(gè)實(shí)驗(yàn)器材需要wiwi元,求最高收入。


解題思路

我們可以從舍棄的方面思考,如果做這個(gè)實(shí)驗(yàn)就得舍棄買(mǎi)器材的錢(qián),如果不做就得舍棄可獲得的錢(qián)。然后就可以想到最小割,如果不做就割去這個(gè)實(shí)驗(yàn)的邊,如果做就割去需要器材的邊。于是我們可以這樣構(gòu)圖:

然后這樣割

表示舍棄了1818,加上原本實(shí)驗(yàn)有的3535

35?18=1735?18=17
所以最高收入就是17


代碼

#include<cstdio> #include<cstring> #include<algorithm> using namespace std; struct line{int to,next,w; }a[100010]; int n,m,x,y,d[110],tot,state[110],num; int head,tail,ls[110],s,e,ans,anse,t; char c; void addl(int x,int y,int w) {a[tot].to=y;a[tot].next=ls[x];a[tot].w=w;ls[x]=tot++;a[tot].to=x;a[tot].next=ls[y];a[tot].w=0;ls[y]=tot++; } bool bfs() {head=0;tail=1;memset(d,-1,sizeof(d));d[s]=0;state[1]=s;do{head++;int x=state[head];for (int q=ls[x];~q;q=a[q].next){int y=a[q].to;if (a[q].w>0 && d[y]==-1){d[y]=d[x]+1;state[++tail]=y;if (y==e) return true;}}}while (head<tail);return false; } int dinic(int x,int flow) {int rest=0,k;if (x==e) return flow;for (int q=ls[x];~q;q=a[q].next){int y=a[q].to;if (a[q].w>0 && d[y]==d[x]+1){rest+=(k=dinic(y,min(a[q].w,flow-rest)));a[q].w-=k;a[q^1].w+=k;}}if (!rest) d[x]=0;return rest; } int main() {memset(ls,-1,sizeof(ls));scanf("%d%d",&n,&m);s=n+m+1;e=n+m+2;for (int i=1;i<=n;i++){scanf("%d",&t);anse+=t;//計(jì)算全部收益addl(s,i,t);c=getchar();while ((c=getchar())!='\n'){if (c==' ') addl(i,n+num,1e9),num=0;else num=num*10+c-48;}addl(i,n+num,1e9);num=0;}for (int i=1;i<=m;i++){scanf("%d",&num);addl(n+i,e,num);}while (bfs())ans+=dinic(s,1e9);for (int i=1;i<=n;i++)if (d[i]!=-1)printf("%d ",i);//輸出實(shí)驗(yàn)printf("\n");for (int i=1;i<=m;i++)if (d[n+i]!=-1)printf("%d ",i);//輸出器材printf("\n%d",anse-ans); }

總結(jié)

以上是生活随笔為你收集整理的p2762-太空飞行计划问题【网络流,最大权闭合图,最小割】的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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