Submission #7490059
Source Code Expand
def resolve(): import math import sys sys.setrecursionlimit(2147483647) class DoublingLCA: """ LCA ダブリング版 初期化 O(NlogN)、クエリ O(logN) """ def __init__(self,edges,root=0): """ :param list of (list of int) edges: :param int root=0: """ self.edges = edges self.n = len(edges) self.root = root self.MAX_LOG_V = self.n.bit_length() self.depths = [-1] * self.n self.parents = [[-1] * self.n for _ in range(self.MAX_LOG_V)] self.__dfs(-1,root,0) self.__doubling() def __dfs(self,par,cur,dep): self.depths[cur]=dep self.parents[0][cur]=par for v in self.edges[cur]: if v!=par: self.__dfs(cur,v,dep+1) def __doubling(self): for k in range(self.MAX_LOG_V - 1): for v in range(self.n): if self.parents[k][v] < 0: # 親がない continue self.parents[k+1][v]=self.parents[k][self.parents[k][v]] def get(self, u, v): # 深さを合わせる if self.depths[u] > self.depths[v]: u, v = v, u for k in range(self.MAX_LOG_V): if (self.depths[v] - self.depths[u]) >> k & 1: v = self.parents[k][v] if v == u: return v # にぶたん for k in reversed(range(self.MAX_LOG_V)): if self.parents[k][u] != self.parents[k][v]: u = self.parents[k][u] v = self.parents[k][v] return self.parents[0][u] def distance(self, u, v): """ u, v 間の距離 depth[u] + depth[v] - depth[lca]*2 :param u: :param v: :rtype: int """ lca = self.get(u, v) return self.depths[u] + self.depths[v] - self.depths[lca] * 2 N = int(input()) XY = [list(map(int, input().split())) for _ in range(N - 1)] Q = int(input()) AB = [list(map(int, input().split())) for _ in range(Q)] edges = [[] for _ in range(N + 1)] for x, y in XY: edges[x - 1].append(y - 1) edges[y - 1].append(x - 1) LCA = DoublingLCA(edges=edges) for a, b in AB: d = LCA.distance(a - 1, b - 1) print(d + 1) resolve()
Submission Info
Submission Time | |
---|---|
Task | D - 閉路 |
User | moni0627 |
Language | PyPy3 (2.4.0) |
Score | 100 |
Code Size | 2627 Byte |
Status | AC |
Exec Time | 1646 ms |
Memory | 203736 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 | 174 ms | 38256 KB |
subtask0_sample02.txt | AC | 170 ms | 38256 KB |
subtask0_sample03.txt | AC | 178 ms | 38256 KB |
subtask1_01.txt | AC | 1011 ms | 176088 KB |
subtask1_02.txt | AC | 1035 ms | 176088 KB |
subtask1_03.txt | AC | 169 ms | 38256 KB |
subtask1_04.txt | AC | 175 ms | 38256 KB |
subtask1_05.txt | AC | 230 ms | 41712 KB |
subtask1_06.txt | AC | 222 ms | 40688 KB |
subtask1_07.txt | AC | 756 ms | 90712 KB |
subtask1_08.txt | AC | 821 ms | 96600 KB |
subtask1_09.txt | AC | 867 ms | 102360 KB |
subtask1_10.txt | AC | 887 ms | 98520 KB |
subtask1_11.txt | AC | 848 ms | 106968 KB |
subtask1_12.txt | AC | 867 ms | 105048 KB |
subtask2_01.txt | AC | 1545 ms | 203612 KB |
subtask2_02.txt | AC | 1565 ms | 203736 KB |
subtask2_03.txt | AC | 811 ms | 78296 KB |
subtask2_04.txt | AC | 840 ms | 78808 KB |
subtask2_05.txt | AC | 880 ms | 83928 KB |
subtask2_06.txt | AC | 857 ms | 83032 KB |
subtask2_07.txt | AC | 1527 ms | 127192 KB |
subtask2_08.txt | AC | 1499 ms | 125784 KB |
subtask2_09.txt | AC | 1611 ms | 121944 KB |
subtask2_10.txt | AC | 1646 ms | 122456 KB |
subtask2_11.txt | AC | 1638 ms | 120536 KB |
subtask2_12.txt | AC | 1634 ms | 121304 KB |