การ preprocess
ให้ทำ
(เรียก
จาก root)
ขั้นตอนนี้ใช้เวลา
การตอบคำถามว่า
เป็นบรรพบุรุษของ
หรือไม่
กำหนด vertex
และ
สอง vertex ใดๆ ในต้นไม้
มาให้ เราสามารถตรวจสอบได้ว่า
เป็นบรรพบุรุษของ
ได้หรือไม่ดังต่อไปนี้
- ตรวจสอบว่า
หรือไม่
การตรวจสอบนี้ใช้เวลา
ที่เหลือคือเราต้องพิสูจน์ว่าการทดสอบนี้ถูกต้อง ซึ่งเท่ากับการพิูสูจน์ขอ้ความสองข้อความต่อไปนี้
- ถ้า
เป็นบรรพบุรุษของ
แล้ว ![{\displaystyle \mathrm {pre} [u]<\mathrm {pre} [v]<\mathrm {post} [v]<\mathrm {post} [u]\,}](https://wikimedia.org/api/rest_v1/media/math/render/svg/b0ff206bf4f368bf78732711c0de3d6e9fea6020)
- ถ้า
ไม่ใช่บรรพบุรุษของ
แล้ว ข้อความ "
" ไม่เป็นความจริง
ข้อความที่ 1
สมมติว่า
เป็นบรรพบุรุษของ
แล้ว path จาก
ไปยัง
จะต้องผ่าน
ฉะนั้นเมื่อทำ
จาก
เราจะได้ว่า
จะถูกสำรวจก่อน
ฉะนั้น
นอกจากนี้ เนื่องจากเราสามารถเดินจาก
ไปถึง
เราจะได้ว่า
จะต้องถูกสำรวจเสร็จก่อนที่
จะสำรวจ
เสร็จ กล่าวคือ
ฉะนั้นเราสรุปได้ว่า
ข้อความที่ 2
ข้อความที่ 2 สมมูลกับข้อความที่ว่า "ถ้า
"
แล้ว
เป็นบรรพบุรุษของ
สมมติว่า
เราได้ว่า
เป็นบรรพบุรุษของ
ใน DFS tree
แต่เนื่องจากกราฟตั้งต้น
เป็นต้่นไม้อยู่แล้ว
จึงเป็น DFS tree ด้วย ดังนั้น
จึงเป็นบรรพบุรุษของ
ใน