Olya and Game with Arrays (Codeforces 1859B)
Tags: Math, sortings

Artem suggested a game to the girl Olya. There is a list of $$$n$$$ arrays, where the $$$i$$$-th array contains $$$m_i \ge 2$$$ positive integers $$$a_{i,1}, a_{i,2}, \ldots, a_{i,m_i}$$$.Olya can move at most one (possibly $$$0$$$) integer from each array to another array. Note that integers can be moved from one array only once, but integers can be added to one array multiple times, and all the movements are done at the same time.The beauty of the list of arrays is defined as the sum $$$\sum_{i=1}^n \min_{j=1}^{m_i} a_{i,j}$$$. In other words, for each array, we find the minimum value in it and then sum up these values.The goal of the game is to maximize the beauty of the list of arrays. Help Olya win this challenging game!

Input: Each test consists of multiple test cases. The first line contains a single integer $$$t$$$ ($$$1 \le t \le 25000$$$) — the number of test cases. The description of test cases follows.The first line of each test case contains a single integer $$$n$$$ ($$$1 \le n \le 25000$$$) — the number of arrays in the list.This is followed by descriptions of the arrays. Each array description consists of two lines.The first line contains a single integer $$$m_i$$$ ($$$2 \le m_i \le 50000$$$) — the number of elements in the $$$i$$$-th array.The next line contains $$$m_i$$$ integers $$$a_{i, 1}, a_{i, 2}, \ldots, a_{i, m_i}$$$ ($$$1 \le a_{i,j} \le 10^9$$$) — the elements of the $$$i$$$-th array.It is guaranteed that the sum of $$$m_i$$$ over all test cases does not exceed $$$50000$$$.

Output: For each test case, output a single line containing a single integer — the maximum beauty of the list of arrays that Olya can achieve.

Note: In the first test case, we can move the integer $$$3$$$ from the second array to the first array. Then the beauty is $$$\min(1, 2, 3) + \min(4) = 5$$$. It can be shown that this is the maximum possible beauty.In the second test case, there is only one array, so regardless of the movements, the beauty will be $$$\min(100, 1, 6) = 1$$$.

Sample Inputs:
3
2
2
1 2
2
4 3
1
3
100 1 6
3
4
1001 7 1007 5
3
8 11 6
2
2 9

Sample Outputs:
5
1
19

Solution (Python):
import sys
input = sys.stdin.readline
for _ in range(int(input())):
    arr = []
    n = int(input())
    for i in range(n):
        m = int(input())
        arr.append(list(map(int, input().split())))
        arr[i].sort()
    if n == 1:
        print(arr[0][0])
    else:
        global_min = arr[0][1]
        idx = 0
        for i in range(1, n):
            if arr[i][1] < global_min:
                (global_min, idx) = (arr[i][1], i)
        ans = arr[idx][0]
        for i in range(n):
            ans = min(ans, arr[i][0])
        for i in range(n):
            if i != idx:
                ans += arr[i][1]
        print(ans)

Solution (Python):
from sys import stdin, stdout, setrecursionlimit
read = stdin.readline
write = stdout.write
import math

def solve():
    n = int(read())
    mins = []
    maxs = []
    for i in range(n):
        m = int(read())
        a = list(map(int, read().split()))
        a.sort()
        mins.append(a[0])
        if m > 1:
            maxs.append(a[1])
    maxs.sort()
    ans = 0
    for i in range(1, len(maxs)):
        ans += maxs[i]
    ans += min(mins)
    print(ans)

def main():
    t = int(input())
    for _ in range(t):
        solve()
main()

Solution (Python):
import sys
input = sys.stdin.readline
print = sys.stdout.write

def solve():
    use = []
    ans = 0
    m = 1 << 60
    for _ in range(int(input())):
        input()
        a = sorted(map(int, input().split()))
        if len(a) == 1:
            ans += a[0]
        else:
            m = min(m, a[0])
            use.append(a[1])
    use.sort()
    return ans + sum(use[1:]) + m
print('\n'.join(map(str, (solve() for _ in range(int(input()))))))