Submission #54242089
Source Code Expand
Copy
from collections import dequeclass LCA:def __init__(self, G, root=0):V = len(G)K = 1while 1<<K < V:K += 1self.parent = [[-1]*V for _ in range(K)]self.dist = [-1]*Vself.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] = 0que = deque()que.append(root)while que:
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 |
|
|
|
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 |