Cậu bé Mika là một người rất thích đi du lịch cũng giao lưu với những người bạn từ nhiều nơi. Trên mạng xã hội, Mika đã làm quen được \(n\) người bạn và họ sinh sống tại \(n\) thành phố khác nhau trên đất nước. Các thành phố được đánh số từ \(1\) đến \(n\) và được nối với nhau thông qua \(n - 1\) con đường hai chiều sao cho có thể đến được mỗi thành phố từ bất kỳ thành phố nào khác bằng cách đi qua một số con đường, con đường thứ \(i\) kết nối trực tiếp hai thành phố \(a_i\) và \(b_i\).
Vào ngày cuối tuần, Mika quyết định đi đến thăm tất cả những người bạn mới này. Hiện tại, Mika đang ở thành phố thứ nhất và thăm được người bạn đầu tiên. Sau đó anh ấy quyết định thứ thăm người bạn sống ở thành phố thứ \(2\), rồi mới thăm đến người bạn sống ở thành phố thứ \(3\), ... cuối cùng là người bạn sống ở thành phố thứ \(n\). Để đi qua một con đường nhất định, Mika cần phải có một vé hợp lệ. Con đường thứ \(i\) có thể được đi qua nếu bạn có vé một lượt giá \(c_{i_1}\) đồng hoặc vé nhiều lượt giá \(c_{i_2}\) đồng. Vé một lượt chỉ cho phép đi qua con đường một lần, còn vé nhiều lượt thì không giới hạn số lần đi qua con đường đó. Mika muốn tiết kiệm chi phí di chuyển nên hãy giúp cậu ấy tính toán chi phí tối thiểu để Mika có thể đi thăm tất cả người bạn của mình.
Test 1
4
1 2 3 5
1 3 2 4
2 4 1 3
10
Lộ trình của Mika như sau: \(1 \to 2 \to 1 \to 3 \to 1 \to 2 \to 4\).
Mika sẽ mua vé nhiều lượt trên con đường thứ nhất (\(1 - 2\)), con đường thứ hai (\(1 - 3\)) và vé một lượt trên con đường thứ ba (\(2 - 4\)).
Test 2
4
1 4 5 5
3 4 4 7
2 4 2 6
16
Test 3
5
1 2 2 3
1 3 2 3
1 4 2 3
1 5 2 3
11
Rumiru là một cô bé rất thích chơi với slime. Hôm nay, cô quyết định đến một cửa hàng để mua một số con về chơi. Trong cửa hàng có trưng bày \(n\) con slime, con thứ \(i\) từ trái sang phải có kích thước \(a_i\). Rumiru muốn mua một số con slime và gộp một số cặp lại với nhau để tạo thành ít nhất một con có kích thước đúng bằng \(s\), quy tắc gộp như sau:
Hãy giúp Rumiru đếm số cách mua thoả mãn điều kiện. Biết rằng, hai cách mua được xem là khác nhau khi tồn tại một con slime được mua ở cách này nhưng không được mua ở cách còn lại.
Test 1
3 2
1 1 2
5
Có \(5\) cách mua thoả mãn là: \(\{a_3\}, \{a_1, a_2\}, \{a_1, a_3\}, \{a_2, a_3\}, \{a_1, a_2, a_3\}\).
Test 2
5 4
1 1 2 3 4
18
Cho tập hợp \(S\) gồm \(n\) xâu kí tự: \(S_1, S_2, \dots, S_n\). Kí tự trong các xâu này có thể là a
hoặc b
.
Một xâu \(A\) được gọi là xâu hoán vị của xâu \(B\), nếu ta có thể tạo ra được xâu \(A\) bằng cách sắp xếp lại các kí tự của xâu \(B\). Hãy tạo tập hợp \(S'\) theo nguyên tắc sau: với mỗi xâu \(S_i\) \((1 \le i \le n)\), ta thêm tất cả các xâu hoán vị của \(S_i\) vào \(S'\). Nói cách khác, \(S'\) là tập hợp các xâu hoán vị của \(n\) xâu thuộc \(S\).
Ta tiến hành dựng cây trie của tập xâu \(S'\) vừa tạo. Hãy cho biết cây trie này có bao nhiêu nút.
Trie là một cấu trúc dữ liệu dạng cây dùng để lưu trữ một danh sách các xâu với bộ kí tự hữu hạn, cho phép việc lưu trữ các xâu hiệu quả có tiền tố giống nhau.
Cây trie được dựng theo nguyên tắc: mỗi nút liên kết với một xâu ký tự sao cho các xâu ký tự của tất cả các nút con của một nút đều có chung một tiền tố, chính là xâu ký tự của nút đó. Nút gốc tương ứng với xâu ký tự rỗng.
Ví dụ, với các xâu aba
, abb
, acb
, ta dựng được một cây trie gồm \(7\) nút như sau:
a
hoặc b
.Test 1
1
abaa
14
Test 2
2
abb
aaa
11