1. 程式人生 > >從一道題目的解法試談網絡流的構造與算法 論文題

從一道題目的解法試談網絡流的構造與算法 論文題

eve 集合 順序輸出 格式 output 包括 所有 class 公司準備

項目發展規劃(Develop)

Macrosoft? 公司準備制定一份未來的發展規劃。公司各部門提出的發展項目匯總成了一張規劃表,該表包含了許多項目。對於每個項目,規劃表中都給出了它所需的投資或預計的盈利。由於某些項目的實施必須依賴於其它項目的開發成果,所以如果要實施這個項目的話,它所依賴的項目也是必不可少的。現在請你擔任Macrosoft? 公司的總裁,從這些項目中挑選出一部分,使你的公司獲得最大的凈利潤。

l 輸入

輸入文件包括項目的數量N,每個項目的預算Ci和它所依賴的項目集合Pi。格式如下:

1行是N;

接下來的第i行每行表示第i個項目的信息。每行的第一個數是Ci,正數表示盈利,負數表示投資。剩下的數是項目i所依賴的項目的編號。

每行相鄰的兩個數之間用一個或多個空格隔開。

l 輸出

1行是公司的最大凈利潤。接著是獲得最大凈利潤的項目選擇方案。若有多個方案,則輸出挑選項目最少的一個方案。每行一個數,表示選擇的項目的編號,所有項目按從小到大的順序輸出。

l 數據限制

0≤N≤1000

-1000000≤Ci≤1000000

l 輸入輸出範例

Sample Input

Sample Output

6

-4

1

2 2

-1 1 2

-3 3

5 3 4

3

1

2

3

4

6

建立N頂點代表N個項目,另外增加源s與匯t。若項目i必須依賴於項目j,則從頂點i向頂點j引一條容量為無窮大的弧。對於每個項目i,若它的預算C為正(盈利),則從源s向頂點i引一條容量為C的邊;若它的預算C為負(投資),則從頂點i向匯t引一條容量為-C的邊。

求這個網絡的最小割(S, T),設其容量C(S,T)F。設R為所有盈利項目的預算之和(凈利潤上界),那麽R-F就是最大凈利潤;S中的頂點就表示最優方案所選擇的項目。

最小割的邊集 即為滿流的邊

最小割 = 最大流 = 滿流邊的邊權和

分析題目 不要看到花費就想費用流

不要看到結點 就像拆點 先想一下是否只有兩種狀態

負的變正的 與 原來正的分別與t 和 s相連

從一道題目的解法試談網絡流的構造與算法 論文題