P1517 飘飘乎居士的乌龟
时间: 1000ms / 空间: 131072KiB / Java类名: Main
飘飘乎居士养了乌龟。当然,这些乌龟是用来出售赚取利润的。
飘飘乎居士的乌龟被安置在了m个窝中。现在,飘飘乎居士已经接到了n个人的定购通知,他们会按顺序在来挑选乌龟,其中,第i个人会在pi个窝中挑选乌龟, 但最多只想买xi只乌龟。另外,在第i个人购买完乌龟以后,飘飘乎居士会将指定的qi个窝中的龟进行调整,他可以任意调换指定的qi个窝中乌龟数量。飘飘 乎希望知道,在n个人购买完乌龟后,他最多可以出售多少只乌龟?
输入格式:第一行,两个正整数n、m。
接下来一行m个整数(可能为0),第i个整数表示第i个窝中乌龟的数量。
接下来输入分为n组,每组3行输入,第i组表示第i个人的信息:
第一行一个整数xi,表示第i个人最多购买的乌龟数量
第二行一个整数pi以及pi整数,表示该顾客会在pi个指定的窝中挑选乌龟
第三行一个整数qi(qi可能为0)以及跟着的qi个正整数,表示在第i个人购买完乌龟后,飘飘乎居士会调整这qi个窝中乌龟的数量。
输出格式:一行,表示飘飘乎居士最多出售乌龟的数量。
输入样例1: 2 4 2 2 5 0 3 1 3 2 1 4 10 2 4 3 输入样例2: 1 2 3 3 4 4 1 2 3 4
输出样例1: 7 输出样例2:
Hint:样例一解释:飘飘乎居士4个窝,初始时,第一个窝里有2只乌龟,第二个窝里有2只乌龟,第三个窝里有5只乌龟;第四窝里没有乌龟,共有2位顾客来购买乌龟。
在
第一位顾客到来时,他想在3号窝中挑选乌龟,最多只想买3只乌龟。飘飘乎居士将3号窝中的乌龟出售。出售以后,3号窝剩下2只乌龟,飘飘乎居士可以调整
1、4号窝中乌龟的数量,将1号窝中的2只乌龟转入4号窝中,这样,1号窝没有乌龟,3号窝2只乌龟,4号窝有2只乌龟。
在第二个顾客来时,他想要在3 4号窝中挑选最多10只乌龟,飘飘乎居士将从1号窝调整到4号窝中的2只乌龟以及3号窝剩下的2只乌龟卖出。共卖出7只乌龟,也就是最后的答案。
数据范围:0<n、m<=10
每个窝初始时乌龟的数量以及每位顾客购买乌龟的数量<=100000
0<=Pi、qi<=n
数据保证输入的正确性。
【思路】
最大流。
构图:
1
对于每个龟窝建立n个结点,建立s t点。
2
连边:
(s,ui,twi) 表示龟的数量
(ui,tmp,INF),(tmp,t,xi) tmp为中转结点,限制pi个点的总流量
(qj,qj+1,INF) 表示乌龟的调换
(ui,ui+1,INF)
【代码】