Theo dõi tiến độ
Đề bài
Mô tả
Cho một cây gồm đỉnh được đánh số từ đến , biểu diễn bằng ma trận kề . Người ta chạy đoạn mã giả sau trên cây đó:
used[1 ... n] = {0, ..., 0};
procedure dfs(v):
print v;
used[v] = 1;
for i = 1, 2, ..., n:
if (a[v][i] == 1 and used[i] == 0):
dfs(i);
dfs(1);
Kết quả in ra là một dãy số, chính là thứ tự các đỉnh được thăm.
Cho trước dãy . Hãy đếm số cây khác nhau sao cho đoạn mã giả trên in ra đúng dãy .
Hai cây đỉnh được coi là khác nhau nếu ma trận kề của chúng khác nhau, tức là tồn tại cặp với mà .
Vì kết quả có thể rất lớn, hãy in ra phần dư của nó khi chia cho .
Dữ liệu vào
- Dòng đầu chứa số nguyên dương là độ dài của dãy .
- Dòng thứ hai chứa số nguyên dương .
Dữ liệu ra
Một số nguyên duy nhất: số cây thoả mãn, lấy phần dư khi chia cho .
Ràng buộc
- là một hoán vị của
Ví dụ
| Input | Output | Giải thích |
|---|---|---|
| 3 1 2 3 |
2 | Có hai cây thoả mãn: đường thẳng , và hình sao với đỉnh nối tới cả và . Với hình sao, vòng lặp tại đỉnh duyệt tăng dần nên thăm trước rồi mới tới . |
| 3 1 3 2 |
1 | Chỉ có đường thẳng . Hình sao bị loại vì tại đỉnh vòng lặp luôn thăm trước , cho ra dãy . |
Bình luận