線性規劃與網路流24題 2 太空飛行計畫

2021-07-23 04:52:10 字數 2475 閱讀 7330

【線性規劃與網路流24題 2】太空飛行計畫

description

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

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

由於本oj無special judge , 所以只需要輸出最多能得到的淨獲利。

input

第1行有2 個正整數m和n。m是實驗數,n是儀器數。(n,m<=50)

接下來的m 行,每行是乙個實驗的有關資料。第乙個數贊助商同意支付該實驗的費用;

接著是該實驗需要用到的若干儀器的編號。最後一行的n個數是配置每個儀器的費用。

output

/*程式執行結束時,將最佳實驗方案輸出。

第 1 行是實驗編號;第 2行是儀器編號;

最後一行是淨收益。

*/一行,包含乙個整數,表示最大淨收益

sample input

2 3

10 1 2

25 2 3

5 6 7

sample output

/*

1 21 2 3

*/17

這個題是乙個很經典的模型:最大權閉合圖(可以參見**:最小割模型在資訊學競賽中的應用)

閉合圖的性質反映的是事件的必要條件:a發生,那麼a的所有前提要發生

在本題中,做實驗是有收益的,但是,實驗必須要有相關裝置才能完成,而購買相關裝置則是有花費的

這就構成了事件的必要條件:要想做實驗,先把某個實驗所必須的裝置購買好

把每個實驗看作二分圖x集合中的頂點,每個裝置看作二分圖y集合中的頂點,增加源s和匯t。

1、從s向每個xi連線一條容量為該點收入的有向邊。

2、從yi向t連線一條容量為該點支出的有向邊。

3、如果乙個實驗i需要裝置j,連線一條從xi到yj容量為無窮大的有向邊。

所有實驗的收入只和total,求網路最大流maxflow,最大收益就是total-maxflow

補充:當題目中有點權的時候,常見的有三種做法

a:建立源點s,將點權化為s到該點u的邊權

b:建立匯點t,將點權化為該點u到t的邊權

c:拆點,將點權化為u1-u2的邊權(這種時候,一般是卡容量或者卡流量的題了,比如poj 3281,需要對牛進行拆點,來限制每頭牛)

如何求匹配的方案?

如果使用的是dinic的模板,那麼:dep【x】不為初始化的值,那麼就表明這個點是取過的

**如下:

//#include#include#include#include#includeusing namespace std;

const int maxn=1100;

const int maxm=12010;

const int inf=999999;

struct edgeedge[maxm];

int tol,head[maxn];

void init()

void addedge(int u,int v,int w,int rw=0)

int q[maxn],dep[maxn],cur[maxn],sta[maxn];

bool bfs(int s,int t,int n)

} }return false;

}int dinic(int s,int t,int n)

u=edge[sta[tail]^1].to;

}else if (cur[u]!=-1&&edge[cur[u]].cap>edge[cur[u]].flow&&dep[u]+1==dep[edge[cur[u]].to])

else

} }return maxflow;

}int main()

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

mincut=dinic(s,t,tot);

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

if (dep[i]!=-1) printf("%d ",i);

printf("\n");

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

if (dep[i+n]!=-1) printf("%d ",i);

printf("\n");

*/ printf("%d\n",sumpoint-mincut);

return 0;

}

線性規劃與網路流24題 02太空飛行計畫問題

這個題的shut5.in的資料會是多解,所以評測可能出錯。很好的乙個題。重點在向最小割的轉化。建議看一下胡泊濤的 最小割模型在資訊學競賽中的應用 裡面很詳細。也很好。include include includeusing namespace std define inf 1 30 define m...

線性規劃與網路流24 太空飛行計畫問題

題目鏈結點這裡 最大權閉合子圖問題 構圖 將正權點與源點相連,邊的cap為權值。負權點與匯點相連邊的cap為abs 權值 負權點與正權點的邊cap為inf。有個結論就是,閉合子圖的最大權 sum 正權點 最大流 具體的證明有點迷,我看了好久才看懂的,可能以後會寫一篇部落格講解 include inc...

線性規劃與網路流24題 17 運輸問題

description w公司有m個倉庫和n 個零售商店。第i 個倉庫有ai個單位的貨物 第j個零售商店需要bj個單位的貨物。貨物供需平衡,即sigma ai sigma bj 從第i個倉庫運送每單位貨物到第j個零售商店的費用為cij。試設計乙個將倉庫中所有貨物運送到零售商店的運輸方案,使總運輸費用...