https://atcoder.jp/contests/abc238/tasks/abc238_e
パッと見線形代数ですが、AtCoderだからDPかもしれないと考えると、次のような状態を考えることができます。
そう考えるとから(4, 6)を足すと、(2, 3)を引くととなります。すなわち、6 <-> 3 <-> 1というようなグラフを考えることができます。例1なら 0 <-> 2 <-> 1 <-> 3、例2なら 2 <-> 0 <-> 3 <-> 1 です。
このようなグラフを作って、0から辿ってNに着けばOKです。
# coding: utf-8 # Range Sums from itertools import * import sys #################### library #################### def read_tuple(): return tuple(map(int, raw_input().split())) def YesNo(b): return 'Yes' if b else 'No' #################### naive #################### #################### process #################### def read_input(): N, Q = read_tuple() LR = [ read_tuple() for _ in range(Q) ] return (N, LR) def make_graph(N, LR): graph = dict((v, []) for v in range(N+1)) for L, R in LR: graph[L-1].append(R) graph[R].append(L-1) return graph def F(N, LR): graph = make_graph(N, LR) visited = [False] * (N+1) visited[0] = True stack = [0] while stack: v0 = stack.pop() for v in graph[v0]: if not visited[v]: stack.append(v) visited[v] = True return visited[N] #################### main #################### N, LR = read_input() print YesNo(F(N, LR))