ในข้อนี้เราได้รับต้นไม้มา หน้าที่ของเราคือการหาความยาวของ longest path บนต้นไม้ต้นนี้ โดยที่ความยาวของเส้นเชื่อมมีค่าเท่ากับความยุ่งเหยิงของเส้นเชื่อมนั้น ๆ
ก่อนอื่นให้เราทำการ root tree ที่จุดยอด โดยการมองจุดยอด เป็นรากของต้นไม้ แล้วให้จุดยอดอื่น ๆ ลดหลั่นกันลงมาตามเส้นทางจาก ไปหาจุดยอดนั้น ๆ
การ root tree จะทำให้จุดยอดใด ๆ ยกเว้นจุดยอด มี "parent" ของตัวมันเอง โดย parent คือจุดยอดแรกที่มันต้องผ่านในเส้นทางจากจุดยอดนั้น ๆ ถึง root เราจะแทน parent ของจุดยอด ด้วย
จากนั้นสำหรับจุดยอด ใด ๆ ที่ไม่ใช่ เราจะให้ แทนเส้นเชื่อมที่เชื่อมระหว่าง และ
สังเกตว่าสำหรับจุดยอด ใด ๆ ถ้าเราตัดเส้นเชื่อม ออก ต้นไม้ของเราจะถูกแบ่งออกเป็นสองส่วน คือ subtree ของ (รวม ด้วย) และ ส่วนที่เหลือของต้นไม้ โดยการจะเดินทางจากจุดยอดในส่วนหนึ่งไปหาจุดยอดในอีกส่วนหนึ่ง ต้องใช้ เสมอ
ดังนั้นค่าความยุ่งเหยิงของ จะมีค่าเท่ากับ เมื่อ คือขนาดของ subtree ของ และ คือจำนวนจุดยอดทั้งหมดในต้นไม้ สามารถคำนวณได้จาก เมื่อ คือจุดยอดที่มี เป็น parent
ค่าความยุ่งเหยิงของเส้นเชื่อมทั้งหมดจะสามารถคำนวณได้โดย DFS ในเวลา
จากนั้นเราจะต้องทำการหาเส้นทางที่ยาวที่สุดบนต้นไม้นี้ ซึ่งมีหลายวิธี แต่วิธีที่ผู้เขียนคิดว่าเรียบง่ายที่สุดคือวิธีการหา longest path สองครั้ง ซึ่งสามารถทำได้ดังนี้
- เริ่มที่จุดยอด ใด ๆ แล้วหาจุดยอดที่มีระยะทางไกลจาก มากที่สุด เรียกจุดยอดนี้ว่า
- หาจุดยอดที่มีระยะทางไกลจาก มากที่สุด ระยะทางระหว่าง และจุดยอดนี้จะเป็น longest path บน tree
ทั้งสองขั้นตอนสามารถทำได้โดย Dijkstra's Algorithm หรือ DFS
ดังนั้นเราจะสามารถแก้ปัญหานี้ได้ในเวลา