CF1251E2 Voting (Hard Version)
题目描述
简单版与困难版的唯一区别在于数据范围。
现在在 Berland 举行选举,你希望赢得选举。更准确地说,你希望每个人都投票给你。
共有 $n$ 个选民,你有两种方式说服每个选民投票给你。第一种方式是给第 $i$ 个选民 $p_i$ 枚金币。第二种方式是让 $m_i$ 个其他选民投票给你,这样第 $i$ 个选民就会免费投票给你。
此外,这种投票过程会分多步进行。例如,如果有五个选民,$m_1 = 1$,$m_2 = 2$,$m_3 = 2$,$m_4 = 4$,$m_5 = 5$,你可以先买下第 5 个选民的选票,最终所有人都会投票给你。投票给你的人集合变化如下:${5} \rightarrow {1, 5} \rightarrow {1, 2, 3, 5} \rightarrow {1, 2, 3, 4, 5}$。
请计算,为了让所有人都投票给你,你最少需要花费多少金币。
输入格式
第一行包含一个整数 $t$($1 \le t \le 2 \cdot 10^5$),表示测试用例的数量。
每个测试用例的第一行包含一个整数 $n$($1 \le n \le 2 \cdot 10^5$),表示选民人数。
接下来的 $n$ 行,每行描述一个选民。第 $i$ 行包含两个整数 $m_i$ 和 $p_i$($1 \le p_i \le 10^9, 0 \le m_i < n$)。
保证所有测试用例中 $n$ 的总和不超过 $2 \cdot 10^5$。
输出格式
对于每个测试用例,输出一个整数,表示让所有人都投票给你所需花费的最少金币数。
说明/提示
第一个测试用例中,你需要买下第 3 个选民的选票。投票给你的人集合变化如下:${3} \rightarrow {1, 3} \rightarrow {1, 2, 3}$。
第二个示例中,你无需购买任何选票。投票给你的人集合变化如下:${1} \rightarrow {1, 3, 5} \rightarrow {1, 2, 3, 5} \rightarrow {1, 2, 3, 5, 6, 7} \rightarrow {1, 2, 3, 4, 5, 6, 7}$。
第三个测试用例中,你需要买下第 2 个和第 5 个选民的选票。投票给你的人集合变化如下:${2, 5} \rightarrow {1, 2, 3, 4, 5} \rightarrow {1, 2, 3, 4, 5, 6}$。
由 ChatGPT 4.1 翻译