ARC 078 D Fennec VS. Snuke【Python】

問題はこちら

import sys
from collections import deque
readline = sys.stdin.readline

def main():
   INF = float('inf')
   N = int(readline())
   conn = [[] for _ in range(N)]
   for _ in range(N - 1):
       a, b = map(int, readline().split())
       a -= 1; b -= 1
       conn[a].append(b)
       conn[b].append(a)
       
   dist = [INF]*N
   prev = [-1]*N
   dist[0] = 0; q = deque([0])
   while q:
       x = q.popleft()
       for y in conn[x]:
           if dist[y] == INF:
               dist[y] = dist[x] + 1
               prev[y] = x
               q.append(y)
               
   path = deque([])
   t = N - 1
   while t >= 0:
       path.appendleft(t)
       t = prev[t]
       
   a, b = path[dist[-1] // 2], path[dist[-1] // 2 + 1]
   conn[a].remove(b); conn[b].remove(a)
   
   blacks = 0
   visited_b = [False]*N
   q_b = deque([0]); visited_b[0] = True
   while q_b:
       x = q_b.popleft()
       blacks += 1
       for y in conn[x]:
           if not visited_b[y]:
               visited_b[y] = True
               q_b.append(y)
               
   whites = 0
   visited_w = [False]*N
   q_w = deque([N - 1]); visited_w[N - 1] = True
   while q_w:
       x = q_w.popleft()
       whites += 1
       for y in conn[x]:
           if not visited_w[y]:
               visited_w[y] = True
               q_w.append(y)
               
   print("Fennec" if blacks > whites else "Snuke")
   
   
if __name__ == "__main__":
   main()


この記事が気に入ったらサポートをしてみませんか?