提出 #5581449


ソースコード 拡げる

import sys
input = sys.stdin.readline
sys.setrecursionlimit(10**6)

U = 17
N = int(input())
edge = [[] for _ in range(N+1)]

for _ in range(N-1):
  x,y = map(int,input().split())
  edge[x].append(y)
  edge[y].append(x)
   
# 頂点xから根に向かって2**i進んだ到達点
# 行き過ぎている場合は0
go_back = [[0]*U for _ in range(N+1)]
depth = [0] * (N+1)

def set(x,d,p):
  depth[x] = d
  go_back[x][0] = p
  for i in range(1,U):
    go_back[x][i] = go_back[go_back[x][i-1]][i-1]
    if go_back[x][i] == 0:
      break
  for y in edge[x]:
    if y == p:
      continue
    set(y,d+1,x)

set(1,0,0)

def calc_dist_same_depth(x,y):
  if x == y:
    return 0
  j = 0
  while go_back[x][j] != go_back[y][j]:
    j += 1
  if j == 0:
    return 2
  rx = go_back[x][j-1]
  ry = go_back[y][j-1]
  return calc_dist_same_depth(rx,ry) + (1<<j)

def calc_dist(x,y):
  dx = depth[x]
  dy = depth[y]
  d = dy - dx
  if d < 0:
    d = -d
    x,y = y,x
  result = d
  j = 0
  while d:
    bit = 1<<j
    if d&bit:
      y = go_back[y][j]
      d ^= bit
    j += 1
  return calc_dist_same_depth(x,y) + result

Q = int(input())
for _ in range(Q):
  a,b = map(int,input().split())
  print(calc_dist(a,b)+1)

提出情報

提出日時
問題 D - 閉路
ユーザ maspy
言語 Python (3.4.3)
得点 100
コード長 1267 Byte
結果 AC
実行時間 1833 ms
メモリ 135504 KiB

ジャッジ結果

セット名 Sample Subtask1 Subtask2
得点 / 配点 0 / 0 30 / 30 70 / 70
結果
AC × 3
AC × 12
AC × 27
セット名 テストケース
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
ケース名 結果 実行時間 メモリ
subtask0_sample01.txt AC 17 ms 3188 KiB
subtask0_sample02.txt AC 17 ms 3188 KiB
subtask0_sample03.txt AC 17 ms 3188 KiB
subtask1_01.txt AC 952 ms 134652 KiB
subtask1_02.txt AC 964 ms 134652 KiB
subtask1_03.txt AC 17 ms 3188 KiB
subtask1_04.txt AC 18 ms 3188 KiB
subtask1_05.txt AC 23 ms 3444 KiB
subtask1_06.txt AC 23 ms 3700 KiB
subtask1_07.txt AC 584 ms 43316 KiB
subtask1_08.txt AC 608 ms 43184 KiB
subtask1_09.txt AC 708 ms 43312 KiB
subtask1_10.txt AC 759 ms 44832 KiB
subtask1_11.txt AC 812 ms 46044 KiB
subtask1_12.txt AC 708 ms 44460 KiB
subtask2_01.txt AC 1594 ms 135492 KiB
subtask2_02.txt AC 1588 ms 135504 KiB
subtask2_03.txt AC 356 ms 4080 KiB
subtask2_04.txt AC 432 ms 4036 KiB
subtask2_05.txt AC 650 ms 4320 KiB
subtask2_06.txt AC 588 ms 4368 KiB
subtask2_07.txt AC 1290 ms 46144 KiB
subtask2_08.txt AC 1293 ms 44116 KiB
subtask2_09.txt AC 1569 ms 44216 KiB
subtask2_10.txt AC 1713 ms 45524 KiB
subtask2_11.txt AC 1833 ms 46796 KiB
subtask2_12.txt AC 1736 ms 47024 KiB