Submission #54242089


Source Code Expand

Copy
from collections import deque
class LCA:
def __init__(self, G, root=0):
V = len(G)
K = 1
while 1<<K < V:
K += 1
self.parent = [[-1]*V for _ in range(K)]
self.dist = [-1]*V
self.bfs(G, root)
for i in range(K-1):
for j in range(V):
if self.parent[i][j] != -1:
self.parent[i+1][j] = self.parent[i][self.parent[i][j]]
def bfs(self, G, root):
self.dist[root] = 0
que = deque()
que.append(root)
while que:
 
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
from collections import deque

class LCA:
    def __init__(self, G, root=0):
        V = len(G)
        K = 1
        while 1<<K < V:
            K += 1
        self.parent = [[-1]*V for _ in range(K)]
        self.dist = [-1]*V
        self.bfs(G, root)
        for i in range(K-1):
            for j in range(V):
                if self.parent[i][j] != -1:
                    self.parent[i+1][j] = self.parent[i][self.parent[i][j]]
        
    def bfs(self, G, root):
        self.dist[root] = 0
        que = deque()
        que.append(root)
        while que:
            n = que.popleft()
            for v in G[n]:
                if self.dist[v] == -1:
                    self.dist[v] = self.dist[n]+1
                    self.parent[0][v] = n
                    que.append(v)
    
    def query(self, a, b):
        if self.dist[a] < self.dist[b]:
            a, b = b, a
        K = len(self.parent)
        for i in range(K):
            if (self.dist[a]-self.dist[b]) & 1<<i:
                a = self.parent[i][a]
        if a == b:
            return a
        for i in reversed(range(K)):
            if self.parent[i][a] != self.parent[i][b]:
                a = self.parent[i][a]
                b = self.parent[i][b]
        return self.parent[0][a]

N = int(input())
edge = [[] for _ in range(N)]
for _ in range(N-1):
    x, y = map(int, input().split())
    edge[x-1].append(y-1)
    edge[y-1].append(x-1)
Q = int(input())
ab = [list(map(int, input().split())) for _ in range(Q)]

lca = LCA(edge)
for a, b in ab:
    a-=1; b-=1
    c = lca.query(a, b)
    ans = lca.dist[a] + lca.dist[b] - 2 * lca.dist[c] + 1
    print(ans)

Submission Info

Submission Time
Task D - 閉路
User do_an
Language Python (PyPy 3.10-v7.3.12)
Score 100
Code Size 1703 Byte
Status AC
Exec Time 453 ms
Memory 123732 KB

Judge Result

Set Name Sample Subtask1 Subtask2
Score / Max Score 0 / 0 30 / 30 70 / 70
Status
AC × 3
AC × 12
AC × 27
Set Name Test Cases
Sample subtask0_sample01.txt, subtask0_sample02.txt, subtask0_sample03.txt
Subtask1 subtask1_01.txt, subtask1_02.txt, subtask1_03.txt, subtask1_04.txt, subtask1_05.txt, subtask1_06.txt, subtask1_07.txt, subtask1_08.txt, subtask1_09.txt, subtask1_10.txt, subtask1_11.txt, subtask1_12.txt
Subtask2 subtask0_sample01.txt, subtask0_sample02.txt, subtask0_sample03.txt, subtask1_01.txt, subtask1_02.txt, subtask1_03.txt, subtask1_04.txt, subtask1_05.txt, subtask1_06.txt, subtask1_07.txt, subtask1_08.txt, subtask1_09.txt, subtask1_10.txt, subtask1_11.txt, subtask1_12.txt, subtask2_01.txt, subtask2_02.txt, subtask2_03.txt, subtask2_04.txt, subtask2_05.txt, subtask2_06.txt, subtask2_07.txt, subtask2_08.txt, subtask2_09.txt, subtask2_10.txt, subtask2_11.txt, subtask2_12.txt
Case Name Status Exec Time Memory
subtask0_sample01.txt AC 69 ms 77064 KB
subtask0_sample02.txt AC 69 ms 76764 KB
subtask0_sample03.txt AC 70 ms 76964 KB
subtask1_01.txt AC 151 ms 109536 KB
subtask1_02.txt AC 151 ms 109616 KB
subtask1_03.txt AC 69 ms 76784 KB
subtask1_04.txt AC 70 ms 77224 KB
subtask1_05.txt AC 88 ms 83268 KB
subtask1_06.txt AC 85 ms 81600 KB
subtask1_07.txt AC 221 ms 110316 KB
subtask1_08.txt AC 208 ms 110048 KB
subtask1_09.txt AC 214 ms 109992 KB
subtask1_10.txt AC 214 ms 109532 KB
subtask1_11.txt AC 213 ms 109836 KB
subtask1_12.txt AC 214 ms 109632 KB
subtask2_01.txt AC 233 ms 120628 KB
subtask2_02.txt AC 236 ms 120816 KB
subtask2_03.txt AC 184 ms 96712 KB
subtask2_04.txt AC 190 ms 96792 KB
subtask2_05.txt AC 215 ms 95732 KB
subtask2_06.txt AC 208 ms 96056 KB
subtask2_07.txt AC 413 ms 123732 KB
subtask2_08.txt AC 400 ms 122452 KB
subtask2_09.txt AC 407 ms 122272 KB
subtask2_10.txt AC 426 ms 122312 KB
subtask2_11.txt AC 453 ms 122320 KB
subtask2_12.txt AC 423 ms 122720 KB


2025-04-15 (Tue)
05:19:04 +00:00