網路流24題 太空飛行計畫

2021-08-22 15:21:17 字數 2098 閱讀 7130

題目

洛谷p2762 解法

考慮網路流建模。設定點

1 1

~ n' role="presentation" style="position: relative;">n

n表示每種儀器,點n+

1 n+1

~ n+

m n+m

表示每個專案,超源

s s

,超匯t' role="presentation" style="position: relative;">tt。從

s s

向所有專案各連一條邊(s

,j,c

apac

ity=

pj)' role="presentation" style="position: relative;">(s,

j,ca

paci

ty=p

j)(s

,j,c

apac

ity=

pj),從所有儀器各向

t t

連一條邊(k

,t,c

apac

ity=

ck)' role="presentation" style="position: relative;">(k,

t,ca

paci

ty=c

k)(k

,t,c

apac

ity=

ck),從每個實驗向其所需的儀器連邊(j

,k,c

apac

ity=

+∞) (j,

k,ca

paci

ty=+

∞)

,答案即為所有實驗的總收益減去最大流。

於是,正確性?

首先考慮所有被選擇的點,假設這些點所代表的每個專案淨收益都為正,專案

j j

所需的儀器集合為

k' role="presentation" style="position: relative;">k

k,那麼由於每個專案的淨收益為正,有∀j

,pj⩾

∑x∈k

∀ j,

pj⩾∑

x∈

k,故該專案在模型中對最大流的貢獻為∑x

∈k∑ x∈

k。

對於未被選擇的專案,它們的淨收益一定為負,那麼其對最大流的貢獻為pj

p j。

綜上,在總淨收益最大的情況下若乙個專案被選擇,其對最大流的貢獻等於其淨收益;若其未被選擇,其對最大流的貢獻等於其收益(p

j)( pj

)。因此答案為所有實驗的總收益減去最大流。

**

#include

#include

#include

#include

#include

using

namespace

std;

struct edge

edge(int y,int d):v(y),c(d){}

};const

int inf=1000000000;

vector

point[103];

vector

vec;

char ch;

int n,m,k[51],w[51],s,t,x,ans,d[103],p[103];

inline

void addedge(int x,int y,int c,int i=0)

bool bfs()

}return d[t];

}int dfs(int u,int f)

}return0;}

int main()

for(int i=1;i<=n;++i)scanf("%d",w+i),addedge(i,t,w[i]);

while(bfs())

for(int i=1;i<=m;++i)if(d[i+n])printf("%d ",i);puts("");for(int i=1;i<=n;++i)if(d[i])printf("%d ",i);puts("");printf("%d",ans);

}

網路流24題 太空飛行計畫

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

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

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

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

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