412. Sislovesme -

Multiple test cases are given. T // number of test cases (1 ≤ T ≤ 20) N // number of people (1 ≤ N ≤ 10^5) love[1] love[2] … love[N] // N integers, 1 ≤ love[i] ≤ N The sum of N over all test cases does not exceed 10^6 . Output For each test case output a single line containing the number of mutual‑love pairs. Sample Input

Memory – The array love[1…N] is stored: . 412. Sislovesme

love[i] = j and love[j] = i . Your task is to count how many mutual‑love pairs exist in the given group. Multiple test cases are given

def solve() -> None: data = sys.stdin.buffer.read().split() it = iter(data) t = int(next(it)) out_lines = [] for _ in range(t): n = int(next(it)) love = [0] + [int(next(it)) for _ in range(n)] # 1‑based list ans = 0 for i in range(1, n + 1): j = love[i] if i < j and love[j] == i: ans += 1 out_lines.append(str(ans)) sys.stdout.write("\n".join(out_lines)) Sample Input Memory – The array love[1…N] is stored:

When the loop later reaches i = b , the first condition fails ( b < a is false), so the pair is counted again. ∎ Lemma 3 If a pair i, j is not a mutual‑love pair, the algorithm never increments mutualPairs for it.