CFCF2055E.Haystacks

省选/NOI-

通过率:0%

AC君温馨提醒

该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

在下一个新月之夜,宇宙将会重置,从佛罗里达开始。现在轮到“Florida Man”来阻止这一切,但他首先需要找到一个重要的物品。有 nn 个干草堆,编号从 11nn,其中第 ii 个干草堆包含 aia_i 个干草捆。某一个干草堆下藏着一根针,但你并不知道是哪一个。你的任务是移动干草捆,使得每个干草堆至少被清空一次,这样你才能检查该干草堆下是否藏着针。

然而,过程并不简单。一旦某个干草堆 ii 第一次被清空,它将被分配一个高度上限,此后该干草堆中不能再有超过 bib_i 个干草捆。更正式地说,每次操作如下:

  • 选择两个干草堆 iijj。如果干草堆 ii 还没有被清空过,或者干草堆 ii 当前的干草捆数量严格小于 bib_i,你可以从干草堆 jj 向干草堆 ii 移动恰好 11 个干草捆。

注意:在干草堆被清空之前,没有高度上限,你可以向该干草堆移动任意数量的干草捆。

请计算最少需要多少次操作,才能保证每个干草堆至少被清空一次。如果无法做到,请输出 1-1

输入格式

每个测试点包含多个测试用例。第一行包含一个整数 tt1t1041 \le t \le 10^4),表示测试用例的数量。

每个测试用例的第一行包含一个整数 nn(2 \le n \le 5 \time 10^5),表示干草堆的数量。

接下来的 nn 行中,第 ii 行包含两个整数 aia_ibib_i1ai,bi1091 \le a_i, b_i \le 10^9),分别表示第 ii 个干草堆初始的干草捆数量,以及该堆第一次被清空后分配的高度上限。

保证所有测试用例中 nn 的总和不超过 5×1055 \times 10^5

输出格式

对于每个测试用例,输出一个整数,表示最少需要的操作次数,才能保证每个干草堆至少被清空一次。如果无法做到,输出 1-1

输入输出样例

  • 输入#1

    7
    2
    3 5
    2 4
    2
    10 1
    1 10
    3
    1 3
    4 3
    1 1
    3
    5 4
    2 4
    1 10
    6
    2 1
    3 3
    5 4
    1 5
    1 6
    1 8
    5
    3 2
    1 2
    1 1
    1 3
    6 5
    2
    5 10
    7 12

    输出#1

    8
    -1
    8
    9
    14
    15
    19

说明/提示

在第一个测试用例中,可以按如下顺序操作:

  • 从干草堆 11 向干草堆 22 移动 33 个干草捆。此时干草堆 11 被清空,并被分配高度上限 55
  • 从干草堆 22 向干草堆 11 移动 55 个干草捆。此时干草堆 22 被清空,并被分配高度上限 44

上述操作共需要 3+5=83 + 5 = 8 次。无法用更少的操作完成,因为如下操作是无效的:

  • 从干草堆 22 向干草堆 11 移动 22 个干草捆。此时干草堆 22 被清空,并被分配高度上限 44
  • 从干草堆 11 向干草堆 22 移动 44 个干草捆。此时干草堆 11 还剩 11 个干草捆,干草堆 2244 个干草捆。
  • 此时干草堆 11 无法被清空,因为干草堆 22 已经达到了高度上限 44,无法再从干草堆 11 向干草堆 22 移动干草捆。

在第二个测试用例中,任务无法完成。因为两个干草堆的高度上限都太小,一旦其中一个被清空,另一个就无法被清空。

在第三个测试用例中,最优的操作顺序如下:

  • 从干草堆 11 向干草堆 33 移动 11 个干草捆。此时干草堆 11 被清空,并被分配高度上限 33
  • 从干草堆 22 向干草堆 11 移动 33 个干草捆。
  • 从干草堆 22 向干草堆 33 移动 11 个干草捆。此时干草堆 22 被清空,并被分配高度上限 33
  • 从干草堆 33 向干草堆 22 移动 33 个干草捆。此时干草堆 33 被清空,并被分配高度上限 11

上述操作共需要 1+3+1+3=81 + 3 + 1 + 3 = 8 次。

首页