trang chủ / bài tập / matchind

Bộ ghép cặp hay tập độc lập

Đề bài

Mô tả

Cho một đồ thị vô hướng đơn (không có khuyên, không có cạnh kép) với 3n đỉnh và m cạnh. Các đỉnh được đánh số từ 1 đến 3n, các cạnh được đánh số từ 1 đến m theo thứ tự xuất hiện trong dữ liệu vào.

Bạn cần tìm một trong hai cấu trúc sau:

  • Một bộ ghép cặp (matching) gồm đúng n cạnh — tập các cạnh sao cho không có hai cạnh nào dùng chung một đỉnh.
  • Một tập độc lập (independent set) gồm đúng n đỉnh — tập các đỉnh sao cho không có hai đỉnh nào được nối với nhau bởi một cạnh.

Nếu cả hai cấu trúc đều không tồn tại, hãy thông báo điều đó (tuy nhiên, có thể chứng minh rằng với mọi đồ thị thoả mãn ràng buộc, ít nhất một trong hai cấu trúc luôn tồn tại). Nếu tồn tại cả bộ ghép cặp lẫn tập độc lập kích thước n, in ra một trong hai cũng được; nếu có nhiều đáp án, in ra một đáp án bất kỳ.

Dữ liệu vào chứa T đồ thị độc lập, hãy xử lý từng đồ thị.

Dữ liệu vào

  • Dòng đầu chứa số nguyên T — số đồ thị cần xử lý (T1).
  • Với mỗi đồ thị:
    • Dòng đầu chứa hai số nguyên nm (1n105, 0m5·105).
    • m dòng tiếp theo, mỗi dòng chứa hai số nguyên uivi (1ui,vi3n, uivi) mô tả một cạnh nối ui với vi.

Tổng n trên tất cả đồ thị không vượt quá 105, tổng m không vượt quá 5·105.

Dữ liệu ra

Với mỗi đồ thị, in ra kết quả theo định dạng:

  • Nếu chọn bộ ghép cặp: dòng đầu in Matching, dòng thứ hai in n số nguyên — chỉ số các cạnh thuộc bộ ghép cặp.
  • Nếu chọn tập độc lập: dòng đầu in IndSet, dòng thứ hai in n số nguyên — chỉ số các đỉnh thuộc tập độc lập.
  • Nếu cả hai đều không tồn tại: in Impossible.

Các chỉ số có thể in theo thứ tự bất kỳ.

Ví dụ

Input Output Giải thích
4
1 2
1 3
1 2
1 2
1 3
1 2
2 5
1 2
3 1
1 4
5 1
1 6
2 15
1 2
1 3
1 4
1 5
1 6
2 3
2 4
2 5
2 6
3 4
3 5
3 6
4 5
4 6
5 6
Matching
1
Matching
1
IndSet
3 4
Matching
1 10
4 đồ thị. Hai đồ thị đầu giống nhau (n=1, một cạnh (1,2)); cả hai đều cho phép cả bộ ghép cặp {1} lẫn tập độc lập {3} — in ra cái nào cũng được. Đồ thị thứ ba (n=2, các cạnh từ đỉnh 1 tới 2,3,4,5): không có bộ ghép cặp 2 cạnh nhưng có tập độc lập {3,4}. Đồ thị thứ tư (n=2, K6 thiếu): có bộ ghép cặp {1,10}={(1,2),(3,4)}.
1
5 39
1 2
3 4
5 6
7 8
1 9
3 10
3 11
5 12
5 13
7 14
7 15
9 2
10 2
11 2
12 2
13 2
14 2
15 2
9 4
10 4
11 4
12 4
13 4
14 4
15 4
9 6
10 6
11 6
12 6
13 6
14 6
15 6
9 8
10 8
11 8
12 8
13 8
14 8
15 8
IndSet
9 10 11 12 13
n=5, đồ thị 2 phía dạng "bốn lá" giữa các đỉnh chẵn nhỏ {2,4,6,8} và đỉnh lớn {9..15}. Các đỉnh 9,10,11,12,13 không có cạnh nối nhau, tạo thành tập độc lập kích thước 5.

Bình luận

Không có bình luận tại thời điểm này.

gnatmake 12.2.0 a68g 3.1.2 nasm 2.16.1 as_x64 2.46 awk 1.3.4 gcc 16.1.0 csc 6.12.0.200 g++ 16.1.0 g++-themis 16.1.0 g++17 16.1.0 g++20 16.1.0 g++23 16.1.0 clang++ 22.1.6 dmd 2.112.0 dart 3.12.1 gforth 0.7.3 gfortran 12.2.0 go 1.26.3 groovyc 5.0.6 javac 25.0.3 node 26.2.0 kotlinc 2.3.21 sbcl 2.2.9 lua 5.4.8 nim 2.2.10 fpc 3.2.2 fpc-themis 3.2.2 perl 5.36.0 php 8.5.6 pike 8.0 pypy3 7.3.23 python3 3.14.5 racket 8.7 ruby 4.0.5 rustc 1.96.0 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 tclsh 8.6 bun 1.3.14 deno 2.8.1 v 0.5.1 zig 0.16.0