Hướng dẫn cho Hiếu và bản đồ kho báu
Chỉ sử dụng khi thực sự cần thiết như một cách tôn trọng tác giả và người viết hướng dẫn này.
Chép code từ bài hướng dẫn để nộp bài là hành vi có thể dẫn đến khóa tài khoản.
Chép code từ bài hướng dẫn để nộp bài là hành vi có thể dẫn đến khóa tài khoản.
Authors:
Ta đưa bài này về đồ thị như sau : Coi mỗi cặp số như một cạnh có hướng từ u tới v, như thế mỗi mật khẩu hợp lệ chính là một đường đi trên đồ thị.
Ta cần phải tính tổng tất cả các đường đi có thể.
Tuy nhiên, lưu ý trường hợp đồ thị có chu trình. Lúc này sẽ có vô số mật khẩu. Ta sử dụng sắp xếp topo (topological sort) để kiểm tra đồ thị có phải là DAG?
Gọi numpath[u]
là số đường đi xuất phát từ đỉnh \(u\), sumpath[u]
là tổng các đường đi xuất phát từ đỉnh \(u\)
Ta thực hiện DFS trên đồ thị và QHĐ với công thức sau
Với mỗi cạnh \(u \rightarrow v\) ta có :
numpath[u] += numpath[v]
sumpath[u] += sumpath[v] + numpath[v] * a[u]
ĐPT \(O(n+m)\)
Bình luận