Vâng, tôi nghĩ rằng bạn có thể làm điều này trong thời gian . Tôi phác thảo một phương pháp dưới đây. Có lẽ có một cách đơn giản hơn để làm điều đó, nhưng những điều sau đây là đủ.O(1)
Sơ chế. Tôi sẽ cho rằng chúng ta có thể xem cây của bạn như một cây có rễ, với một số gốc. Trong quá trình tiền xử lý, chú thích mỗi nút nội bộ với một ví dụ về một chiếc lá là hậu duệ của . Điều này có thể được thực hiện trong thời gian tiền xử lý , bằng cách sử dụng giao dịch từ trên xuống rất đơn giản (DFS).wwO(n+m)
Ngoài ra, xác định đệ quy như sau: nếu có bất kỳ anh chị em nào, thì ; mặt khác, trong đó là cha mẹ của ; và , nơi là gốc rễ của . Trong tiếng Anh, được định nghĩa là nút có được bằng cách bắt đầu từ và tiếp tục đi lên cho đến khi chúng ta đạt đến một nút có hai hoặc nhiều con (hoặc gốc). Trong quá trình tiền xử lý, chúng tôi sẽ tính giá trị của cho mỗi nút và lưu trữ nó được liên kết với . Điều này cũng có thể được tính trongp∗(⋅)wp∗(w)=wp∗(w)=p∗(v)vwp∗(r)=rrTp∗(w)wp∗(w)wwO(n+m) thời gian.
Trả lời một truy vấn. Bây giờ, đây là cách trả lời truy vấn trả về bất kỳ lá nào có thể truy cập từ với một đường dẫn bao gồm và không có sự cố cạnh nào khác chov(u,v)v :
Trường hợp 1: Giả sử là con của . Sau đó, trả lời số tiền truy vấn của bạn để trả về bất kỳ lá nào là hậu duệ của . Điều này có thể được thực hiện trong thời gian bằng cách sử dụng chú thích trên .uvuO(1)u
Trường hợp 2: Giả sử là cha mẹ của và có ít nhất một đứa con khác. Sau đó, nhìn vào bất kỳ đứa trẻ khác của , gọi nó là . Sau đó, trả lời số tiền truy vấn của bạn để trả về bất kỳ lá nào là hậu duệ của . Điều này có thể được thực hiện trong thời gian bằng cách sử dụng chú thích trên .uvuuwwO(1)w
Trường hợp 3: Giả sử là cha mẹ của và không có con khác. Sau đó, hãy để và để là bất kỳ đứa con nào khác của (không phải là tổ tiên của ). Sau đó, trả lời số tiền truy vấn của bạn để trả về bất kỳ lá nào là hậu duệ của . Điều này có thể được thực hiện trong thời gian bằng cách sử dụng chú thích trên .uvuu′=p∗(u)wu′vwO(1)w
Trong cả ba trường hợp, câu trả lời cho truy vấn có thể được tính trong thời gian .O(1)