ก่อนอื่นให้ทำการหาเส้นทางแห่งความพยายาม การหาสามารถทำได้หลายวิธีเช่น DFS หรือ LCA
เมื่อหาเสร็จแล้วให้จินตนาการเส้นทางแห่งความพยายามเป็นเส้นตรงแนวนอน บนถนนนี้หลาย ๆ แห่งจะมี "ทางแยก" ที่พาออกไปจากเส้นทางแห่งความพยายาม
ให้เส้นทางแห่งความพยายามประกอบไปด้วยจุดยอด และ และ ถูกเชื่อมด้วยถนนที่มีความยาว สำหรับ สำหรับจุดยอด ใด ๆ ในเส้นทางแห่งความพยายามนี้ เรานิยาม แทนเส้นทางที่ไกลที่สุดที่เริ่มต้นที่ ที่ไม่รวมเส้นทางแห่งความพยายาม
สามารถคำนวณได้โดย DFS ในเวลา
จากนั้นให้พิจารณาโครงสร้างของกราฟของเรา เส้นทางแห่งความพยายามสามารถเขียนแทนในรูป กำหนดให้ จะได้ระยะทางจาก ถึง เท่ากับ
ดังนั้นสำหรับแต่ละคำถาม ให้ และ แทนตำแหน่งของเมืองของช่วงเริ่มต้นและสิ้นสุดตามที่ทีมงานประกาศและให้ และ เป็นตำแหน่งของเมืองที่เราจะพิจารณา โดย คำตอบของเราจะกลายเป็นค่าที่สูงสุดของ (กรณีที่เราเข้าเส้นทางแห่งความพยายามที่ และออกที่ )
สังเกตว่าหากเรานิยาม และ เราจะต้องหาแค่ค่าที่มากที่สุดของ ได้ในเวลาเร็ว ๆ
เราสามารถทำเช่นนี้ได้โดยใช้ segment tree โดยสำหรับ node ที่แทนช่วงหนึ่ง ให้เราเก็บ
- ที่มากที่สุดของช่วงนี้
- ที่มากที่สุดของช่วงนี้
- ที่ ที่มาุกที่สุดของช่วงนี้
การคำนวณข้อ 1, 2 ตอน merge จะค่อนข้างตรงไปตรงมา การคำนวณข้อ 3 สามารถทำได้โดยการใช้ค่า max ระหว่างข้อ 3 ของ node ลูกด้านซ้าย ข้อ 3 ของ node ลูกด้านขวา และข้อ 1 ของ node ลูกด้านซ้ายบวกกับข้อ 2 ของ node ลูกด้านขวา
ดังนั้นเราจะสามารถแก้โจทย์นี้ได้ในเวลา