BOI 2011 - Phản chiếu cây

Xem PDF



Dạng bài
Ngôn ngữ cho phép
Assembly, Awk, C, C#, C++, Clang, Cobol, D, Groovy, Haskell, JS, Java, Kotlin, Lua, Node JS, OCaml, ObjectiveC, PHP, Pascal, Perl, Prolog, Pypy, Pypy 3, Python, Ruby, Rust, Scala, Scratch, Swift
Điểm: 2400 (p) Thời gian: 3.0s Bộ nhớ: 256M Input: bàn phím Output: màn hình

Cho \(T\) là một cây có gốc, tức một đồ thị vô hướng liên thông không có chu trình, và \(S\) là một bản sao hoàn toàn giống \(T\).

Lấy hợp của \(T\)\(S\), rồi gộp từng cặp đỉnh lá tương ứng của hai cây thành một đỉnh; tuyệt đối không gộp hai gốc. Ta gọi đồ thị thu được là một đồ thị phản chiếu cây.

Hãy viết chương trình xác định xem một đồ thị vô hướng liên thông cho trước có phải là đồ thị phản chiếu cây hay không.

Dữ liệu vào

Dòng đầu tiên chứa hai số nguyên \(N\)\(M\), là số đỉnh và số cạnh của đồ thị \(G\). Các đỉnh được đánh số từ \(1\) đến \(N\).

Mỗi dòng trong \(M\) dòng tiếp theo chứa hai số nguyên \(x\)\(y\), mô tả một cạnh, với \(x\ne y\)\(1\le x,y\le N\). Giữa mỗi cặp đỉnh có nhiều nhất một cạnh.

Dữ liệu ra

In YES nếu \(G\) là đồ thị phản chiếu cây; ngược lại, in NO.

Ràng buộc

  • \(3 \le N,M \le 100\,000\).
  • Đồ thị vô hướng và liên thông.

Phân nhóm

  • Trong các bộ dữ liệu có tổng cộng 30 điểm, \(3 \le N,M \le 300\).
  • Trong các bộ dữ liệu có tổng cộng 60 điểm, \(3 \le N,M \le 3\,500\); số điểm này bao gồm 30 điểm ở trên.
  • 40 điểm còn lại không có ràng buộc bổ sung.

Ví dụ

Ví dụ 1

Input
7 7
1 2
2 3
3 4
4 5
5 6
6 7
7 1
Output
NO

Ví dụ 2

Input
6 6
1 2
2 3
2 4
3 5
4 5
5 6
Output
YES

Ví dụ 3

Input
22 28
13 8
8 1
1 22
1 12
1 14
13 18
13 4
4 20
20 7
13 15
15 3
15 9
9 16
9 19
22 5
12 5
14 5
5 11
11 6
18 6
7 10
10 17
17 6
3 21
21 6
16 2
19 2
2 21
Output
YES
Giải thích

Hình sau là đồ thị phản chiếu cây trong ví dụ này. Hai gốc là đỉnh 13 và đỉnh 6; các đỉnh lá đã gộp nằm trên đường nét đứt.

Tệp

Bình luận

Mới nhất
Tải bình luận...

Không có bình luận nào.

Kỳ thi: