傳送門
總而言之,就是求乙個圖,每乙個點有點權,閉合圖就是若圖中有點$u$,且原圖中存在邊$(u,v)$,那麼點$v$也在圖中。然後求乙個最大權的閉合圖即可(具體證明看上面)。最大權閉合圖可以轉化成下面那樣建圖之後求最小割
源點向所有實驗連邊,容量為收益,實驗向對應儀器連邊,容量為$inf$,儀器向匯點連邊,容量為花費,求乙個最小割就好了,然後答案就是收益總和減去最小割
然後考慮怎麼求方案,因為最後一次bfs沒有增廣成功,而與源點想通的點就是閉合圖中的點,所以只要最後一次分層圖中$dep$不等於$-1$的點即可
1//minamoto
2 #include3 #include4 #include5 #include6
#define inf 0x3f3f3f3f
7using
namespace
std;
8 inline bool read(int &res)
11while(isdigit(ch))
12return ch!='\n'
;13}14
const
int n=105,m=10005;15
int ver[m],next[m],head[n],edge[m],cur[n],tot=1;16
intdep[n],n,m,s,t,ans;
17 queueq;
18 inline void add(int u,int v,int
e)22
bool
bfs()33}
34return ~dep[t];35}
36int dfs(int u,int
limit)46}
47return
flow;48}
49int
dinic()
54int
main()
63for(int i=m+1,x;i<=n+m;++i)
67 ans-=dinic();
68for(int i=1;i<=m;++i)
69if(~dep[i]) printf("
%d "
,i);
70 putchar(10
);71
for(int i=m+1;i<=n+m;++i)
72if(~dep[i]) printf("
%d ",i-m);
73 putchar(10
);74 printf("
%d\n
",ans);
75return0;
76 }
洛谷 P2762 太空飛行計畫問題
題目背景 題目描述 w 教授正在為國家航天中心計畫一系列的太空飛行。每次太空飛行可進行一系列商業性實驗而獲取利潤。現已確定了乙個可供選擇的實驗集合e 和進行這些實驗需要使用的全部儀器的集合i 實驗ej需要用到的儀器是i的子集rj i。配置儀器ik的費用為ck美元。實驗ej的贊助商已同意為該實驗結果支...
洛谷P2762 太空飛行計畫問題
這題套路好深.沒想渠。題意 給你若干個裝置,若干個任務。每個任務需要若干裝置,裝置可重複利用。完成任務有錢,買裝置要錢。問最大總收益 可以什麼任務都不做 解 最大權閉合子圖。對於乙個有向圖,如果選擇了乙個點,那麼就要選擇它的所有後繼節點。求最大權值和。建立s,t,記所有正權值和為sum。s向所有權值...
P2762 太空飛行計畫問題
本來是想做 noi2009的植物大戰殭屍來著,建了半天模型都沒又成功。於是看了看題解,發現這個問題叫做最大權閉合圖 我tm好像沒學過啊.於是先看了看概念,做了下入門的題目,然後一做就是一晚上 慘 我真不是頹了來著。這個題引入了最大權閉合圖的概念。乙個閉合圖的定義為圖中所有點的出邊的終點都在這個圖中。...