題解 太空飛行計畫問題

2022-02-23 20:38:07 字數 1498 閱讀 3462

還是利用最小割的性質,這種題目叫做最大權閉合子圖。

建模方法是這樣

直接跑最小割,用獎金減去最小割就是答案。方案就是最後一遍bfs能遍歷的點

考慮最小割的意義,就是把邊刪掉使得\(s,t\)不連通。

同樣地,由於我們無法改變儀器和任務依賴的關係,只能改變乙個點是否選擇這個狀態,所以我們讓實驗和儀器的連邊為\(inf\)表示我們無法更改這個關係。

我們考慮鴿掉的獎金邊是什麼意思:這條獎金邊是一次流的限制關係,是劣勢的一方

考慮割掉的儀器邊是什麼意思:這條儀器邊太小了,以至於實驗賺的流隨便流滿了。

考慮總獎金減去最小割代價是什麼,就是

\[\sum \text-\sum \text-\sum \text

\]實際上,我們可以考慮每一條流的流經路線,也能獲得同樣的理解。

其他題我能夠獨立完成,這道題不得不看題解...實在是我思維強度不夠

//@winlere

#include#include#include#include#includeusing namespace std; typedef long long ll;

int qaq,n;

inline int qr()

inline int sp()

const int maxn=1e2+5;

struct e

e(const int&a,const int&b,const int&c)

}e[maxn<<4];

int head[maxn];

int cnt=1;

const int inf=0x3f3f3f3f;

int s,t,m;

inline void add(const int&fr,const int&to,const int&w,const int&f)

int sum=0;

queue < int > q;

int d[maxn],cur[maxn];

inline bool bfs()}}

return d[t];

}int dfs(const int&now,int fl)

}return ret;

}inline int dinic()

int main()

}for(register int t=1;t<=m;++t) add(t+n+1,t,qr(),1);

int ans=sum-dinic();

for(register int t=head[s];t;t=e[t].nx)

if(d[e[t].to]) printf("%d ",e[t].to-1);

putchar('\n');

for(register int t=head[t];t;t=e[t].nx)

if(d[e[t].to]) printf("%d ",e[t].to-n-1);

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

return 0;

}

太空飛行計畫問題

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

太空飛行計畫問題

網路流最小費用問題 一開始看這個人的部落格 寫了4天了,還是沒能寫出自己的 後面面還有在這個oj上ac了的 照著這個人的 打,還是沒能想明白。這個 和這個oj上的不同,是簡化問題了的。只求最大收益 照著打的 include include include include define inf 999...

太空飛行計畫問題

跟拍照幾乎是重題。在輸出部分,若最後一次bfs還能到這個點,則可以輸出。只要有乙個點可以從源點過得去,就可以通過正或反流到達所有經過的點。但是我不明白若把所有專案都割掉了,那不就嘎嘎了。這裡也求廣大讀者說出自己的理解。看 includeusing namespace std define inf 1...