洛谷P2762 太空飛行計畫問題(最小割)

2022-03-01 14:50:37 字數 1312 閱讀 2515

傳送門

總而言之,就是求乙個圖,每乙個點有點權,閉合圖就是若圖中有點$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好像沒學過啊.於是先看了看概念,做了下入門的題目,然後一做就是一晚上 慘 我真不是頹了來著。這個題引入了最大權閉合圖的概念。乙個閉合圖的定義為圖中所有點的出邊的終點都在這個圖中。...