บทนำ
ในการท้าทายนี้งานของคุณคือการเขียนโปรแกรมที่ตัดสินว่าต้นไม้ที่ให้มาสองต้นนั้นเป็น isomorphic หรือไม่ ทรีหมายถึงกราฟที่กำหนดทิศทางโดยที่ทุกโหนดมีขอบขาออกเดียวยกเว้นรูทซึ่งไม่มี ต้นไม้สองต้น isomorphic หากสามารถแปลงเป็นต้นไม้อื่นได้โดยเปลี่ยนชื่อโหนด ตัวอย่างเช่นต้นไม้สองต้น (ที่ขอบทุกจุดชี้ขึ้น)
0 0
/|\ /|\
1 3 4 1 2 5
|\ /|
2 5 3 4
จะเห็นได้อย่างง่ายดายว่าเป็น isomorphic
เราเข้ารหัสต้นไม้เป็นรายการL
ของจำนวนเต็ม nonnegative ในวิธีต่อไปนี้ รากของต้นไม้ที่มีฉลากและก็ยังมีโหนด0
1,2,...,length(L)
แต่ละโหนดi > 0
มีขอบออกไปถึงL[i]
(โดยใช้การจัดทำดัชนีแบบ 1 ฐาน) ตัวอย่างเช่นรายการ (พร้อมดัชนีที่ให้ไว้ภายใต้องค์ประกอบ)
[0,0,1,3,2,2,5,0]
1 2 3 4 5 6 7 8
เข้ารหัสต้นไม้
0
/|\
1 2 8
| |\
3 5 6
| |
4 7
อินพุต
อินพุตของคุณเป็นสองรายการของจำนวนเต็มที่ไม่ใช่ค่าลบที่กำหนดในรูปแบบเนทิฟหรือภาษาของคุณ พวกเขาเข้ารหัสต้นไม้สองต้นในลักษณะที่ระบุไว้ข้างต้น คุณสามารถยอมรับเงื่อนไขต่อไปนี้เกี่ยวกับพวกเขาได้:
- พวกเขาไม่ว่างเปล่า
- พวกเขามีความยาวเท่ากัน
- แต่ละรายการ
L
น่าพอใจL[i] < i
สำหรับทุก (1-based)i
ดัชนี
เอาท์พุต
ผลลัพธ์ของคุณจะเป็นค่าความจริงหากต้นไม้มีค่า isomorphic และมีค่าไม่แน่นอนถ้าไม่
กฎและการให้คะแนน
คุณสามารถเขียนโปรแกรมเต็มหรือฟังก์ชั่น จำนวนไบต์ต่ำสุดที่ชนะและช่องโหว่มาตรฐานไม่ได้รับอนุญาต ไม่มีข้อ จำกัด ด้านเวลา แต่มีการสร้างภายในเพื่อตัดสินใจว่าไม่อนุญาตให้ใช้แผนภูมิหรือมอร์ฟของกราฟ
กรณีทดสอบ
อินสแตนซ์ที่แท้จริง
[0] [0]
[0,1,2,1] [0,1,1,3]
[0,1,1,3,3] [0,1,2,2,1]
[0,1,0,1,2,3,3,0] [0,0,2,1,0,4,2,1]
[0,1,2,3,1,2,3,0,8] [0,1,0,3,3,4,4,7,7]
อินสแตนซ์ที่เป็นเท็จ
[0,0] [0,1]
[0,1,2,0,3,3,4] [0,1,2,3,0,4,3]
[0,1,0,1,2,3,3,0] [0,0,2,1,0,5,2,1]
[0,1,1,0,1,3,2,1,5] [0,1,0,3,3,3,2,5,2]
[0,1,2,3,1,2,3,0,8] [0,1,0,1,4,4,5,6,6]
[0,1,0,2,0,3,0,4,0,5] [0,0,2,1,0,3,4,0,0,9]