傳送門
給定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 儀器向匯點連邊,容...