Task: | Company Queries II |
Sender: | Farah |
Submission time: | 2024-10-13 21:00:22 +0300 |
Language: | Python3 (CPython3) |
Status: | READY |
Result: | TIME LIMIT EXCEEDED |
test | verdict | time | |
---|---|---|---|
#1 | ACCEPTED | 0.02 s | details |
#2 | ACCEPTED | 0.02 s | details |
#3 | ACCEPTED | 0.02 s | details |
#4 | ACCEPTED | 0.02 s | details |
#5 | ACCEPTED | 0.02 s | details |
#6 | TIME LIMIT EXCEEDED | -- | details |
#7 | TIME LIMIT EXCEEDED | -- | details |
#8 | TIME LIMIT EXCEEDED | -- | details |
#9 | TIME LIMIT EXCEEDED | -- | details |
#10 | TIME LIMIT EXCEEDED | -- | details |
#11 | ACCEPTED | 0.02 s | details |
#12 | TIME LIMIT EXCEEDED | -- | details |
Code
import sysimport sysdef main():import sysimport sysfrom math import log2, ceilfrom sys import stdindata = sys.stdin.read().split()ptr = 0n = int(data[ptr]); ptr += 1q = int(data[ptr]); ptr += 1# Initialize adjacency listadj = [[] for _ in range(n + 1)]# Read bosses for employees 2 to nfor child in range(2, n + 1):boss = int(data[ptr]); ptr +=1adj[boss].append(child)LOG = ceil(log2(n)) if n >1 else 1up = [[-1]*(n +1) for _ in range(LOG)]depth = [0]*(n +1)# BFS to compute depth and up[0][v]queue = [1]head = 0up[0][1] = -1 # root has no parentwhile head < len(queue):node = queue[head]head +=1for child in adj[node]:depth[child] = depth[node] +1up[0][child] = nodequeue.append(child)# Precompute up tablesfor k in range(1, LOG):for v in range(1, n +1):if up[k-1][v] != -1:up[k][v] = up[k-1][up[k-1][v]]else:up[k][v] = -1# Function to find LCAdef lca(a, b):if depth[a] < depth[b]:a, b = b, a# Bring a to the same depth as bfor k in range(LOG-1, -1, -1):if up[k][a] != -1 and depth[up[k][a]] >= depth[b]:a = up[k][a]if a == b:return a# Now lift both a and bfor k in range(LOG-1, -1, -1):if up[k][a] != -1 and up[k][a] != up[k][b]:a = up[k][a]b = up[k][b]return up[0][a]output = []for _ in range(q):a = int(data[ptr]); ptr +=1b = int(data[ptr]); ptr +=1output.append(str(lca(a,b)))print('\n'.join(output))if __name__ == "__main__":main()
Test details
Test 1
Verdict: ACCEPTED
input |
---|
10 10 1 2 3 4 5 6 7 8 9 6 9 8 10 10 3 ... |
correct output |
---|
6 8 3 1 8 ... |
user output |
---|
6 8 3 1 8 ... |
Test 2
Verdict: ACCEPTED
input |
---|
10 10 1 1 1 1 1 1 1 1 1 1 7 3 4 4 1 ... |
correct output |
---|
1 1 1 1 1 ... |
user output |
---|
1 1 1 1 1 ... |
Test 3
Verdict: ACCEPTED
input |
---|
10 10 1 1 1 1 2 3 4 4 1 1 8 2 7 8 3 ... |
correct output |
---|
1 1 1 1 1 ... |
user output |
---|
1 1 1 1 1 ... |
Test 4
Verdict: ACCEPTED
input |
---|
10 10 1 1 3 1 2 2 5 3 9 7 2 7 6 3 9 ... |
correct output |
---|
2 2 3 1 1 ... |
user output |
---|
2 2 3 1 1 ... |
Test 5
Verdict: ACCEPTED
input |
---|
10 10 1 2 3 2 5 3 2 2 4 6 1 1 3 1 9 ... |
correct output |
---|
1 1 1 2 2 ... |
user output |
---|
1 1 1 2 2 ... |
Test 6
Verdict: TIME LIMIT EXCEEDED
input |
---|
200000 200000 1 2 3 4 5 6 7 8 9 10 11 12 13 ... |
correct output |
---|
74862 8750 16237 72298 58111 ... |
user output |
---|
(empty) |
Test 7
Verdict: TIME LIMIT EXCEEDED
input |
---|
200000 200000 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ... |
correct output |
---|
1 1 1 1 1 ... |
user output |
---|
(empty) |
Test 8
Verdict: TIME LIMIT EXCEEDED
input |
---|
200000 200000 1 2 1 2 3 2 1 6 3 1 10 12 13 4... |
correct output |
---|
1 2 2 2 1 ... |
user output |
---|
(empty) |
Test 9
Verdict: TIME LIMIT EXCEEDED
input |
---|
200000 200000 1 2 3 4 5 6 7 8 9 10 11 12 13 ... |
correct output |
---|
2796 633 633 151 2690 ... |
user output |
---|
(empty) |
Test 10
Verdict: TIME LIMIT EXCEEDED
input |
---|
200000 200000 1 2 3 4 5 6 7 8 9 10 11 12 13 ... |
correct output |
---|
365 73 103 365 216 ... |
user output |
---|
(empty) |
Test 11
Verdict: ACCEPTED
input |
---|
2 4 1 1 1 1 2 2 1 ... |
correct output |
---|
1 1 1 2 |
user output |
---|
1 1 1 2 |
Test 12
Verdict: TIME LIMIT EXCEEDED
input |
---|
200000 200000 1 1 2 3 4 5 6 7 8 9 10 11 12 1... |
correct output |
---|
27468 6353 27468 6353 6353 ... |
user output |
---|
(empty) |