canuc80k5002·3/50

Đồ Thị Khép Kín

Nộp bài trên LQDOJ

Bài 50 · Eulerian Path

Input chứa nhiều đồ thị vô hướng. Một đồ thị được gọi là khép kín theo cạnh nếu tồn tại một chu trình đi qua mỗi cạnh đúng một lần. Trong bài này toàn bộ đỉnh phải thuộc cùng một thành phần liên thông; vì vậy một đỉnh cô lập cũng khiến đồ thị không đạt yêu cầu.

Input

  • Input gồm nhiều bộ dữ liệu. Mỗi bộ bắt đầu bằng hai số nguyên dương và , sau đó là dòng cạnh.
  • Dòng chỉ chứa số đánh dấu hết input; dòng này không tạo ra output.

Output

  • Với mỗi bộ dữ liệu, in nếu đồ thị có chu trình Euler; ngược lại in .

Constraints

  • Mỗi bộ có .
  • Mỗi bộ có trong package này.
  • Các đỉnh được đánh số từ đến .
  • Sau bộ cuối là một dòng chỉ chứa .

Scoring

  • Subtask ( số điểm): Trong mỗi bộ, và ; toàn input có không quá bộ.
  • Subtask ( số điểm): Không có giới hạn bổ sung.

Example

Test 1

Input

3 3
1 2
2 3
3 1
4 3
1 2
2 3
3 1
0

Output

1
0

Giải thích: Tam giác đầu tiên liên thông và mọi đỉnh có bậc . Ở bộ thứ hai, đỉnh cô lập nên toàn đồ thị không liên thông.

Lời giải tóm tắt
  • Mô hình: Khác với việc chỉ xét các đỉnh có cạnh, contract của bài yêu cầu cả n đỉnh cùng liên thông.
  • Thuật toán: Dùng DSU hoặc DFS để kiểm tra mọi đỉnh cùng thành phần với đỉnh 1, đồng thời yêu cầu mọi bậc chẵn.
  • Chứng minh đúng: Chu trình Euler buộc mọi bậc chẵn và mọi đỉnh thuộc một thành phần. Ngược lại, đồ thị liên thông có toàn bậc chẵn luôn có chu trình Euler theo Hierholzer.
  • Độ phức tạp: Thời gian O(n+m) cho mỗi bộ dữ liệu; bộ nhớ tuyến tính theo số đỉnh và số cạnh/cung.