天天看点

tyvj P1517 飘飘乎居士的乌龟(最大流)

                          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)

【代码】