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

2021-07-27 16:56:24 字數 1397 閱讀 2274

w 教授正在為國家航天中心計畫一系列的太空飛行。每次太空飛行可進行一系列商業性實驗而獲取利潤。現已確定了乙個可供選擇的實驗集合 e=,和進行這些實驗需要使用的全部儀器的集合 i=。實驗 e j 需要用到的儀器是 i 的子集 r j ⊆i。配置儀器 i k 的費用為 c k 美元。實驗 e j 的贊助商已同意為該實驗結果支付 p j 美元。w 教授的任務是找出乙個有效演算法,確定在一次太空飛行中要進行哪些實驗並因此而配置哪些儀器才能使太空飛行的淨收益最大。這裡淨收益是指進行實驗所獲得的全部收入與配置儀器的全部費用的差額。

對於給定的實驗和儀器配置情況,程式設計找出淨收益最大的試驗計畫。

檔案第 1 行有 2 個正整數 m和 n。m 是實驗數,n 是儀器數。接下來的 m 行,每行是乙個實驗的有關資料。第乙個數贊助商同意支付該實驗的費用;接著是該實驗需要用到的若干儀器的編號。最後一行的 n 個數是配置每個儀器的費用。

將最佳實驗方案輸出到檔案 output.txt 中。第 1 行是實驗編號;第 2行是儀器編號;最後一行是淨收益。

2 3

10 1 2

25 2 3

5 6 7

1 2

1 2 3

17給出許多完成後會有收益的實驗,實驗的完成依賴於若干花費得到的儀器。問最大收益。

最大權閉合子圖問題。

先預設為實驗都完成。建圖如下:

- 從源點向所有實驗點連線一條容量為收益的邊

- 儀器點向匯點連一條容量為費用的邊

- 實驗點向儀器點連一條容量無窮大的邊

那麼總收益減去這張圖上的最小割就是答案。

對於求過最小割的殘量網路遍歷一遍,一端被訪問一端未被訪問的邊就是割邊。

由於沒有spj刪去了資料中的方案輸出。

#include

#include

#include

#include

using namespace std;

const int n = 1000 + 10, m = 100000 + 10, inf = 0x3f3f3f3f;

struct edgeedg[m];

int n, m, tot, ans;

int hd[n], nxt[m];

ints, t;

int d[n], q[n], vis[n], dfn;

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

void getit(int a)

}void init()

}bool bfs()

}return vis[t] == dfn;

}int dfs(int

x, int a)

}return flow;

}void work()

int main()

網路流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教授的...