洛谷2762 太空飛行計畫問題

2021-10-09 18:28:44 字數 1614 閱讀 5260

傳送門

給定n個實驗,m種器材,每個實驗都需要使用一些器材。進行某個實驗會獲得該實驗的經費,但是如果沒有該實驗所需要的儀器,就需要花費一些錢來購買。求選擇哪些實驗所獲得的收益最大。

這是網路流最小割的乙個經典應用求最大權閉合圖。按照如下方式建圖:

最小割只會割掉與源點或者匯點相連的邊(其他邊的流量為無窮大)。選擇某個實驗的充分必要條件就是這個實驗與源點s連的邊不被最小割割掉,並且該實驗每個依賴的儀器與匯點t的連邊必須被最小割割掉(想一下如何證明充分性和必要性)。這就滿足了乙個「進行乙個實驗必須購買它所需要的所有儀器」這個設定。最後求最小割即最大流,用所有實驗經費之和減去最小割即為答案。

#include

using

namespace std;

const

int maxn =

505;

const

int inf =

1<<30;

#define ll long long

struct node

}*head;

int level;

inline

void

addedge

(node* v,

int flow,

int cost)

}nodes[maxn]

;int n, m;

namespace dinic}}

return vis[t - nodes];}

intdfs

(node* u,

int flow)

}return delta;

}int

getmaxflow()

}int e[maxn]

, i[maxn]

;void

init()

} ulen++;}

}for

(int i =

1; i <= m; i++

)scanf

("%d"

, i + i)

; dinic::s = nodes;

dinic::t = nodes + n + m +1;

for(

int i =

1; i <= n; i++

) dinic::s-

>

addedge

(nodes + i, e[i],0

);for(

int i =

1; i <= m; i++

) nodes[n + i]

.addedge

(dinic::t, i[i],0

);}int

main

(int argc,

char

* ar**)

putchar(10

);for(

int i =

1; i <= m; i++)if

(dinic::vis[i + n]

)printf

("%d "

, i)

;printf

("\n%lld\n"

, cost)

;return0;

}

洛谷 P2762 太空飛行計畫問題

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

洛谷P2762 太空飛行計畫問題

這題套路好深.沒想渠。題意 給你若干個裝置,若干個任務。每個任務需要若干裝置,裝置可重複利用。完成任務有錢,買裝置要錢。問最大總收益 可以什麼任務都不做 解 最大權閉合子圖。對於乙個有向圖,如果選擇了乙個點,那麼就要選擇它的所有後繼節點。求最大權值和。建立s,t,記所有正權值和為sum。s向所有權值...

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

傳送門 總而言之,就是求乙個圖,每乙個點有點權,閉合圖就是若圖中有點 u 且原圖中存在邊 u,v 那麼點 v 也在圖中。然後求乙個最大權的閉合圖即可 具體證明看上面 最大權閉合圖可以轉化成下面那樣建圖之後求最小割 源點向所有實驗連邊,容量為收益,實驗向對應儀器連邊,容量為 inf 儀器向匯點連邊,容...