题目描述
尼克在一家养猪场工作,这家养猪场共有M间锁起来的猪舍,由于猪舍的钥匙都给了客户,所以尼克没有办法打开这些猪舍,客户们从早上开始一个接一个来购买生猪,他们到达后首先用手中的钥匙打开他所能打开的全部猪舍,然后从中选取他要买的生猪,尼克可以在此期间将打开的猪舍中的猪调整到其它开着的猪舍中,每个猪舍能存放的猪的数量是没有任何限制的。买完猪后客户会将他打开的猪舍关上。
好在尼克事先知道每位客户手中有哪些钥匙,要买多少猪,以及客户到来的先后次序。请你写一个程序,帮助尼克求出最多能卖出多少头生猪。
输入格式
输入文件的第一行包含两个整数M和N,1≤M≤1000,1≤N≤100,M为猪舍的数量,N为客户人数,猪舍的编号为1到M,客户的编号为1到N。
输入文件第二行包含M个空格隔开的整数,依次表示每个猪舍中的生猪数量,每个整数大于等于0,且小于等于1000。
接下来的N行每行表示一位客户的购买信息,第I个客户的购买信息位于第I+2行,
其格式如下:
A K1 K2……KA B
它表示该客户共有A把钥匙,钥匙编号依次为K1K2……KA,且K1< K2<……< KA,B为该客户要买的生猪的头数。
输出格式
输出文件仅有一行包含一个整数,表示尼克最多能卖出的生猪的头数。
input
3 3
3 1 10
2 1 2 2
2 1 3 3
1 2 6
output
7
Solution
这题也算是一道基础的网络流的。
首先我们建一个源点,源点与猪圈之间连边,权值为猪圈中原来猪的数量。
然后从顾客到汇点之间连边,权值为顾客要买的猪的数量。
然后我们考虑猪圈与顾客之间的连边,根据顾客手中拥有的钥匙连边。但是如果顾客要连的猪圈已经被其他人连过了,那只能连那个人了QWQ,权值为正无穷,然后跑一遍最大流就好。
代码:
//By Bibi
/// .-~~~~~~~~~-._ _.-~~~~~~~~~-.
/// __.' ~. .~ `.__
/// .'// \./ \\`.
/// .'// | \\`.
/// .'

尼克在养猪场工作,面临客户按顺序购买生猪的问题。他需要确定最多能卖出多少头猪。给定猪舍数量、客户数量、每间猪舍的猪的数量及每位客户拥有的钥匙和购买需求。通过建立网络流模型,以源点连接猪舍,客户连接汇点,根据钥匙关系连接猪舍和客户,避免重复连接。通过最大流算法计算最多销售量。
&spm=1001.2101.3001.5002&articleId=81006915&d=1&t=3&u=d3f1f1d29a744acab679f55de112a69a)
580

被折叠的 条评论
为什么被折叠?



