题目描述
尼克在一家养猪场工作,这家养猪场共有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
/// .-~~~~~~~~~-._ _.-~~~~~~~~~-.
/// __.' ~. .~ `.__
/// .'// \./ \\`.