| Task: | Company Queries II |
| Sender: | azeaus1 |
| Submission time: | 2025-10-11 16:15:16 +0300 |
| Language: | Python3 (PyPy3) |
| Status: | READY |
| Result: | TIME LIMIT EXCEEDED |
| test | verdict | time | |
|---|---|---|---|
| #1 | ACCEPTED | 0.04 s | details |
| #2 | ACCEPTED | 0.04 s | details |
| #3 | ACCEPTED | 0.04 s | details |
| #4 | ACCEPTED | 0.04 s | details |
| #5 | ACCEPTED | 0.04 s | details |
| #6 | TIME LIMIT EXCEEDED | -- | details |
| #7 | ACCEPTED | 0.69 s | details |
| #8 | TIME LIMIT EXCEEDED | -- | details |
| #9 | TIME LIMIT EXCEEDED | -- | details |
| #10 | ACCEPTED | 1.00 s | details |
| #11 | ACCEPTED | 0.04 s | details |
| #12 | TIME LIMIT EXCEEDED | -- | details |
Code
import sys
sys.setrecursionlimit(300000)
n, q = [int(x) for x in input().split()]
boss = [int(x) for x in input().split()]
queries = []
for _ in range(q):
a, b = [int(x) for x in input().split()]
queries.append([a-1, b-1])
tree = [[] for _ in range(n)]
for i in range(1, n):
tree[boss[i-1]-1].append(i)
visited = [[],[]]
first = [0 for _ in range(n)]
def dfs(x, d):
global visited
first[x] = len(visited[0])
visited[0].append(x)
visited[1].append(d)
for node in tree[x]:
dfs(node, d+1)
visited[0].append(x)
visited[1].append(d)
dfs(0,0)
min_queries = [[0 for _ in range(2*len(visited[0]))] for _ in range(2)]
for i in range(len(visited[0])):
min_queries[0][len(visited[0]) + i] = visited[0][i]
min_queries[1][len(visited[0]) + i] = visited[1][i]
for i in range(len(visited[0])-1, 0, -1):
if min_queries[1][2*i] < min_queries[1][2*i+1]:
min_queries[1][i] = min_queries[1][2*i]
min_queries[0][i] = min_queries[0][2*i]
else:
min_queries[1][i] = min_queries[1][2*i+1]
min_queries[0][i] = min_queries[0][2*i+1]
def compute_minimum(a, b):
a += len(visited[0])
b += len(visited[0])
min_depth = float('inf')
min_node = -1
while a <= b:
if a%2 == 1:
if min_queries[1][a] < min_depth:
min_depth = min_queries[1][a]
min_node = min_queries[0][a]
a += 1
if b%2 == 0:
if min_queries[1][b] < min_depth:
min_depth = min_queries[1][b]
min_node = min_queries[0][b]
b -= 1
a //= 2
b //= 2
return min_node
for query in queries:
a, b = query[0], query[1]
idxA = first[a]
idxB = first[b]
if idxA > idxB:
idxA, idxB = idxB, idxA
print(compute_minimum(idxA, idxB)+1)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: ACCEPTED
| 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 |
|---|
| 1 1 1 1 1 ... |
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: ACCEPTED
| 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 |
|---|
| 365 73 103 365 216 ... |
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) |
