cas = int(input()) def run(): n = int(input()) e = list(map(int, input().split())) e = [x-1 for x in e] a = list(map(int, input().split())) d = [0] * n for i in range(n): d[e[i]] += 1 ans = 0 q = [i for i in range(n) if d[i] == 0] cur = [0] * n while len(q): u = q.pop() v = e[u] ans += max(a[u] - cur[u], 0) cur[v] += a[u] d[v] -= 1 if d[v]==0: q.append(v) k=1 while n >= (1< 0: idx = [] idx.append(i) j = i while e[j] != i: j = e[j] idx.append(j) for j in idx: d[j] = 0 N = len(idx) transit, init = [0] * N,[0] *N for ii in range(N): x = idx[ii] y = idx[(ii + 1) % N] transit[(ii + 1)%N] = max(0, a[y] - a[x] - cur[y]) init[(ii + 1) % N] = max(0, a[y] - cur[y]) # print(transit) # print(init) ans += sum(transit) + min([x-y for x,y in zip(init,transit)]) return ans for ca in range(cas): ans = run() print(f'Case #{ca+1}: {ans}')