網路流24題 太空飛行計畫問題(網路流)

2021-08-14 07:07:35 字數 1574 閱讀 9655

cogs

先假設一開始拿下所有的實驗

現在要做的也就是讓減去的所有收益最少

所以,現在考慮如何求減去的最少收益

每個實驗是兩種選擇:

要麼選,要麼不選

所以想到了最小割

因為選了實驗就必須選器材

所以從實驗向器材連容量為inf的邊

源點向所有的實驗連邊,流量為實驗的報酬

把所有器材向匯點連邊,流量為器材的費用

考慮這個時候算出來的最小割

因為中間的邊不能割,所以如果選了某個實驗,相應的器材一定要選

如果不做某個實驗,割開了實驗的報酬的邊

此時就相當於少獲得了這麼多錢

如果使用了某個器材,就會割開器材的費用的邊

表示這個器材要額外話費這麼多前

這麼考慮下來,也就是說,

算出來的最大流,也就是最小割

等於我們能夠減少的最少的報酬

因此所有實驗的報酬和減去最大流就是答案

至於方案和讀入就自行考慮了

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

#define inf 1000000000

#define max 1000

#define maxl max*max

inline

int read()

while(ch>='0'&&ch<='9')

return x*t;

}struct line

e[maxl];

int h[max],cnt=1;

int n,level[max],n,m,x,sum=0;

bool vis[max];

queue

q;int t;

char s[10000];

inline

void add(int u,int v,int w)

; h[u]=cnt++;

e[cnt]=(line);

h[v]=cnt++;

}inline

bool bfs()}}

return level[t];

}int dfs(int u,int f)

}return re;

}int dinic()

int main()

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

int ans=dinic();

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

if(vis[i+1])printf("%d ",i);

printf("\n");

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

if(vis[i+n+1])printf("%d ",i);

printf("\n");

printf("%d\n",sum-ans);

return

0;}

網路流24題 太空飛行計畫問題

網路流24題大多需要spj,所以需要乙個有spj的oj,本系列 均在www.oj.swust.edu.cn測試通過 最大權閉合子圖裸題,先將所有收益加起來,源點向每個方案連線一條收益的流,每個方案向對應需要的儀器連一條inf,每個儀器向匯點連一條花費的流。輸出方案只需要在最後的阻塞流中看還剩哪幾個點...

網路流24題 太空飛行計畫問題

已確定了乙個可供選擇的實驗集合e 和實驗需要使用的全部儀器的集合i 實驗ej需要用到的儀器是i的子集rj i。配置儀器ik的費用為ck美元。實驗ej的贊助商已同意為該實驗結果支付pj美元。w教授的任務是找出乙個有效演算法,確定在一次太空飛行中要進行哪些實驗並因此而配置哪些儀器才能使太空飛行的淨收益最...

太空飛行計畫問題 網路流24題

w 教授正在為國家航天中心計畫一系列的太空飛行。每次太空飛行可進行一系列商業性實驗而獲取利潤。現已確定了乙個可供選擇的實驗集合e 和進行這些實驗需要使用的全部儀器的集合i 實驗ej需要用到的儀器是i的子集rj i。配置儀器ik的費用為ck美元。實驗ej的贊助商已同意為該實驗結果支付pj美元。w教授的...