Time Limit: 2 sec / Memory Limit: 1024 MB
配点 : 600 点
問題文
N 頂点 M 辺の単純連結無向グラフ G が与えられます。
G の頂点は頂点 1 , 頂点 2, \ldots,頂点 N、辺は辺 1 , 辺 2, \ldots,辺 M と番号づけられており、
辺 i は、頂点 U_i と頂点 V_i を結んでいます。
また、辺の部分集合 S=\{x_1,x_2,\ldots,x_K\} が与えられます。
G 上の歩道であって、任意の x\in S について、辺 x をちょうど 1 回ずつ通るようなものが存在するか判定してください。
S に含まれていない辺は何回(0 回でも良い)通っていてもかまいません。
歩道とは
無向グラフ G 上の歩道とは、k 個 (k は正整数) の頂点と k-1 個の辺を交互に並べた列 v_1,e_1,v_2,\ldots,v_{k-1},e_{k-1},v_k であって、 辺 e_i が頂点 v_i と頂点 v_{i+1} を結んでいるようなものを指す。列の中に同じ頂点や同じ辺が何回登場しても良い。 歩道が辺 x をちょうど 1 回通るとは、e_i=x となるような 1\leq i\leq k-1 がただ 1 つ存在することをいう。制約
- 2 \leq N \leq 2\times 10^5
- N-1 \leq M \leq \min(\frac{N(N-1)}{2},2\times 10^5)
- 1 \leq U_i<V_i\leq N
- i\neq j ならば (U_i,V_i)\neq (U_j,V_j)
- G は連結
- 1 \leq K \leq M
- 1 \leq x_1<x_2<\cdots<x_K \leq M
- 入力はすべて整数
入力
入力は以下の形式で標準入力から与えられる。
N M U_1 V_1 U_2 V_2 \vdots U_M V_M K x_1 x_2 \ldots x_K
出力
問題文の条件をみたす歩道が存在するならば Yes
を、存在しないならば No
を出力せよ。
入力例 1
6 6 1 3 2 3 3 4 4 5 4 6 5 6 4 1 2 4 5
出力例 1
Yes
頂点 i を v_i, 辺 j を e_j と表すことにすると、
(v_1,e_1,v_3,e_3,v_4,e_4,v_5,e_6,v_6,e_5,v_4,e_3,v_3,e_2,v_2) で表される歩道が条件をみたします。
すなわち、G 上を頂点1\to 3\to 4\to 5\to 6\to 4\to 3\to 2 の順に移動するような歩道です。
この歩道は、辺 1,2,4,5 をいずれもちょうど 1 回ずつ通っているため条件をみたします。
入力例 2
6 5 1 2 1 3 1 4 1 5 1 6 3 1 2 3
出力例 2
No
辺 1,2,3 をちょうど 1 回ずつ通るような歩道は存在しないため、No
を出力します。
Score : 600 points
Problem Statement
You are given a simple connected undirected graph G with N vertices and M edges.
The vertices of G are numbered vertex 1, vertex 2, \ldots, and vertex N, and its edges are numbered edge 1, edge 2, \ldots, and edge M.
Edge i connects vertex U_i and vertex V_i.
You are also given a subset of the edges: S=\{x_1,x_2,\ldots,x_K\}.
Determine if there is a walk on G that contains edge x exactly once for all x \in S.
The walk may contain an edge not in S any number of times (possibly zero).
What is a walk?
A walk on an undirected graph G is a sequence consisting of k vertices (k is a positive integer) and (k-1) edges occurring alternately, v_1,e_1,v_2,\ldots,v_{k-1},e_{k-1},v_k, such that edge e_i connects vertex v_i and vertex v_{i+1}. The sequence may contain the same edge or vertex multiple times. A walk is said to contain an edge x exactly once if and only if there is exactly one 1\leq i\leq k-1 such that e_i=x.Constraints
- 2 \leq N \leq 2\times 10^5
- N-1 \leq M \leq \min(\frac{N(N-1)}{2},2\times 10^5)
- 1 \leq U_i<V_i\leq N
- If i\neq j, then (U_i,V_i)\neq (U_j,V_j) .
- G is connected.
- 1 \leq K \leq M
- 1 \leq x_1<x_2<\cdots<x_K \leq M
- All values in the input are integers.
Input
The input is given from Standard Input in the following format:
N M U_1 V_1 U_2 V_2 \vdots U_M V_M K x_1 x_2 \ldots x_K
Output
Print Yes
if there is a walk satisfying the condition in the Problem Statement; print No
otherwise.
Sample Input 1
6 6 1 3 2 3 3 4 4 5 4 6 5 6 4 1 2 4 5
Sample Output 1
Yes
The walk (v_1,e_1,v_3,e_3,v_4,e_4,v_5,e_6,v_6,e_5,v_4,e_3,v_3,e_2,v_2) satisfies the condition, where v_i denotes vertex i and e_i denotes edge i.
In other words, the walk travels the vertices on G in this order: 1\to 3\to 4\to 5\to 6\to 4\to 3\to 2.
This walk satisfies the condition because it contains edges 1, 2, 4, and 5 exactly once each.
Sample Input 2
6 5 1 2 1 3 1 4 1 5 1 6 3 1 2 3
Sample Output 2
No
There is no walk that contains edges 1, 2, and 3 exactly once each, so No
should be printed.