Cây khung xor
Đề bài
Mô tả
Cho một đồ thị vô hướng liên thông gồm đỉnh và cạnh. Cạnh thứ nối hai đỉnh và có trọng số . Giữa hai đỉnh bất kỳ có nhiều nhất một cạnh.
Đồ thị có thêm một tính chất đặc biệt: mỗi đỉnh nằm trên nhiều nhất một chu trình đơn, và toàn bộ đồ thị có nhiều nhất chu trình đơn.
Bạn cần giữ lại một số cạnh sao cho đồ thị vẫn liên thông, đồng thời số cạnh giữ lại là ít nhất có thể (nói cách khác, tập cạnh giữ lại tạo thành một cây khung). Chi phí của một cách giữ lại không phải là tổng trọng số, mà là xor của trọng số các cạnh được giữ: nếu các cạnh giữ lại có trọng số thì chi phí bằng .
Hãy tìm chi phí nhỏ nhất có thể, và đếm số cây khung đạt được chi phí nhỏ nhất đó. Hai cây khung được coi là khác nhau nếu tập cạnh của chúng khác nhau.
Dữ liệu vào
- Dòng đầu chứa hai số nguyên và .
- dòng tiếp theo, dòng thứ chứa ba số nguyên , , mô tả cạnh thứ .
Dữ liệu ra
Một dòng chứa hai số nguyên: chi phí nhỏ nhất, và số cây khung đạt chi phí đó lấy phần dư khi chia cho .
Ràng buộc
- ,
- Đồ thị liên thông, không có hai cạnh nối cùng một cặp đỉnh
- Mỗi đỉnh thuộc nhiều nhất một chu trình đơn, và có nhiều nhất chu trình đơn
Ví dụ
| Input | Output | Giải thích |
|---|---|---|
| 6 6 4 1 5 5 2 1 6 3 2 1 2 6 1 3 3 2 3 4 |
1 1 | Xor của cả trọng số là . Đồ thị có đúng một chu trình với các cạnh trọng số ; cây khung có được bằng cách bỏ đúng một trong ba cạnh đó. Bỏ cạnh trọng số cho chi phí , bỏ cạnh cho , bỏ cạnh cho . Nhỏ nhất là , đạt được theo đúng cách. |
| 9 10 8 7 10 3 6 11 3 8 3 4 5 1 9 3 11 7 3 1 2 6 10 9 4 13 1 6 4 5 9 6 |
0 2 | Xor của cả trọng số là . Có hai chu trình rời nhau: tam giác (trọng số ) và tam giác (trọng số ). Phải bỏ đúng một cạnh ở mỗi chu trình. Bỏ cặp hoặc cặp đều cho chi phí , không có cách nào nhỏ hơn. |
Bình luận