เป้าหมายของการท้าทายนี้จะได้รับแน่นอนกำกับวัฏจักรกราฟ (DAG) ตรวจสอบว่ากราฟเป็นลดสกรรมกริยา
คำอธิบายสั้น ๆ เกี่ยวกับสิ่งที่ DAG และการลดลงของสกรรมกริยาคือ:
DAG เป็นกราฟที่มีขอบกำกับ (เช่นคุณสามารถเดินทางไปในทิศทางเดียวบนขอบนั้น) ซึ่งให้โหนดเริ่มต้นใด ๆ บนกราฟมันเป็นไปไม่ได้ที่จะกลับไปที่โหนดเริ่มต้น (เช่นไม่มีรอบ)
ให้โหนดเริ่มต้นใด ๆ หากเป็นไปได้ที่จะเดินทางไปยังโหนดสิ้นสุดอื่นในกราฟผ่านทางจำนวนบวกขอบโดยพลการจากนั้นโหนดปลายทางนั้นจะถูกกำหนดให้สามารถเข้าถึงได้จากโหนดเริ่มต้น ใน DAG ทั่วไปอาจมีหลายเส้นทางที่สามารถนำมาจากโหนดเริ่มต้นไปยังโหนดปลายทางที่สิ้นสุด ตัวอย่างเช่นใช้กราฟเพชรนี้:
ที่จะได้รับไปยังโหนดDจากAคุณสามารถใช้เส้นทางหรือA->B->D A->C->Dดังนั้นจึงสามารถเข้าถึงได้จากD Aแต่มีเส้นทางที่สามารถนำที่จะได้รับไปยังโหนดไม่เริ่มต้นจากโหนดB Cดังนั้นโหนดไม่สามารถเข้าถึงได้จากโหนดBC
กำหนดความสามารถในการเข้าถึงของกราฟเป็นรายการของโหนดที่สามารถเข้าถึงได้สำหรับทุกโหนดเริ่มต้นในกราฟ ดังนั้นสำหรับกราฟเพชรตัวอย่างเดียวกันความสามารถในการเข้าถึงคือ:
A: [B, C, D]
B: [D]
C: [D]
D: []
กราฟอื่นที่มีความสามารถในการเข้าถึงเหมือนกับกราฟด้านบนแสดงอยู่ด้านล่าง:
อย่างไรก็ตามกราฟที่สองนี้มีขอบมากกว่ากราฟต้นฉบับ การลดสกรรมกริยาของกราฟเป็นกราฟที่มีจำนวนน้อยที่สุดของขอบและความสามารถในการเข้าถึงของกราฟดั้งเดิม ดังนั้นกราฟแรกคือการลดลงของสกรรมกริยาที่สอง
สำหรับ DAG ที่ จำกัด การลดการส่งผ่านจะรับประกันว่ามีอยู่จริงและไม่ซ้ำกัน
อินพุต
อินพุตคือ "รายการของรายการ" โดยที่รายการภายนอกมีความยาวของจำนวนจุดยอดและแต่ละรายการภายในคือความยาวของจำนวนขอบที่ออกจากโหนดที่เกี่ยวข้องและมีดัชนีของโหนดปลายทาง ตัวอย่างเช่นวิธีหนึ่งในการอธิบายกราฟแรกข้างต้นคือ (สมมติว่ามีการทำดัชนีตามศูนย์):
[[1, 2], [3], [3], []]
คุณสามารถเริ่มสร้างดัชนีของโหนดแรกที่ค่าจำนวนเต็มใด ๆ (เช่นการจัดทำดัชนีตาม 0 หรือ 1)
อินพุตอาจมาจากแหล่งอินพุตที่ต้องการ (stdio, พารามิเตอร์ฟังก์ชัน ฯลฯ ) คุณมีอิสระที่จะเลือกรูปแบบการป้อนข้อมูลที่แน่นอนตราบใดที่ไม่มีการให้ข้อมูลเพิ่มเติม ตัวอย่างเช่นหากคุณต้องการรับอินพุตจาก stdio คุณสามารถให้แต่ละบรรทัดเป็นรายการขอบสำหรับโหนดที่เกี่ยวข้อง อดีต .:
1 2
3
3
'' (blank line)
ดัชนีในรายการถ้อยคำแต่ละคนจะไม่จำเป็นต้องเรียงและอาจจะมีการเชื่อมต่อหลายขอบสองโหนด (อดีต .: [[1,1],[]]) คุณอาจสมมติว่ากราฟอินพุตมีการเชื่อมต่ออย่างอ่อนและไม่มีรอบ (เช่น DAG)
เอาท์พุต
เอาท์พุทเป็นความจริงถ้าอินพุต DAG ที่กำหนดคือการลดสกรรมกริยาและค่าเท็จเป็นอย่างอื่น นี่อาจเป็นสิ่งที่ต้องการ (stdio, ค่าส่งคืน, พารามิเตอร์ขาออก, ฯลฯ )
ตัวอย่าง
ตัวอย่างทั้งหมดใช้การทำดัชนีแบบอิง 0
[[1,2],[3],[3],[]]
true
[[1,2,3],[3],[3],[]]
false
[[1,1],[]]
false
[[1,2,3,4],[5,6,7],[5,8,9],[6,8,10],[7,9,10],[11,12],[11,13],[12,13],[11,14],[12,14],[13,14],[],[],[],[]]
true
[[5,6,7],[2,3,0,4],[5,8,9],[6,8,10],[7,9,10],[11,12],[11,13],[12,13],[11,14],[12,14],[13,14],[],[],[],[]]
true
[[5,6,7],[2,3,0,4,14,5,7],[5,8,9],[6,8,10],[7,9,10],[11,12],[11,13],[12,13],[11,14],[12,14],[13,14],[],[],[],[]]
false
[[5,6,7],[2,3,0,4],[5,8,9],[6,8,10],[7,9,10,14],[11,12],[11,13],[12,13],[11,14],[12,14],[13,14],[],[],[],[]]
false
[[1,3],[2],[3],[]]
false
เกณฑ์การให้คะแนน
นี่คือรหัสกอล์ฟ โค้ดที่น้อยที่สุดในหน่วยไบต์ชนะ รหัสของคุณควรเสร็จในเวลาที่เหมาะสม (สูงสุด 10 นาทีสำหรับฮาร์ดแวร์ใดก็ตามที่คุณมี) ช่องโหว่มาตรฐานใช้ คุณสามารถใช้บิวด์อินที่ต้องการได้

