← Back to List

16168번: 퍼레이드 ↗

Solutions

Python 3
845 B | 833 chars
"""
[16168: 퍼레이드](https://www.acmicpc.net/problem/16168)

Tier: Gold 4
Category: 구현
"""
import sys
sys.setrecursionlimit(10**6)


MAX_V = 3300
used_edge = 0

path = []
adj = [[0] * MAX_V for _ in range(MAX_V)]

def eulerPathSearch(node: int, n: int):
  global used_edge

  for i in range(n + 1):
    while adj[node][i] > 0:
      adj[node][i] -= 1
      adj[i][node] -= 1
      used_edge += 1
      eulerPathSearch(i, n)


def solution():
  n, m = map(int, input().split())
  cnt = [0] * (n + 1)

  for i in range(m):
    a, b = map(int, input().split())
    cnt[a] += 1
    cnt[b] += 1
    adj[a][b] += 1
    adj[b][a] += 1

  cnt = sum([i % 2 for i in cnt])

  if cnt != 0 and cnt != 2:
    return 'NO'

  eulerPathSearch(1, n)

  if used_edge == m:
    return 'YES'

  return 'NO'


if __name__ == '__main__':
  print(solution())