এই চ্যালেঞ্জের লক্ষ্যটিকে একটি সীমাবদ্ধ নির্দেশিত অ্যাসাইক্লিক গ্রাফ (ডিএজি) দেওয়া হয়, গ্রাফটি কোনও ট্রানসিটিভ হ্রাস হয় কিনা তা নির্ধারণ করে ।
ডিএজি এবং ট্রানজিটিভ হ্রাস কী কী তার একটি সংক্ষিপ্ত বিবরণ:
একটি ডিএজি হ'ল নির্দেশিত প্রান্তযুক্ত একটি গ্রাফ (যেমন আপনি কেবল সেই প্রান্তে কেবল এক দিকে ভ্রমণ করতে পারেন) যেমন গ্রাফের কোনও প্রারম্ভিক নোড দেওয়া হয় তবে প্রারম্ভিক নোডে ফিরে আসা অসম্ভব (যেমন কোনও চক্র নেই)।
যে কোনও প্রারম্ভিক নোড দেওয়া হয়েছে, যদি গ্রাফের কোনও নির্ধারিত ধনাত্মক সংখ্যার প্রান্তের মাধ্যমে গ্রাফের অন্য একটি শেষ নোডে ভ্রমণ করা সম্ভব হয়, তবে সেই শেষ নোডটি প্রারম্ভিক নোড থেকে অ্যাক্সেসযোগ্য হিসাবে সংজ্ঞায়িত করা হয়। একটি সাধারণ ডিএজি-তে, একাধিক পাথ থাকতে পারে যা একটি শুরুর নোড থেকে একটি লক্ষ্য সমাপ্ত নোডে নেওয়া যেতে পারে। উদাহরণস্বরূপ, এই হীরা গ্রাফটি নিন:
নোডের পেতে D
থেকে A
, আপনি পাথ গ্রহণ করতে পারে A->B->D
বা A->C->D
। সুতরাং, D
থেকে পৌঁছনীয় A
। তবে নোড B
থেকে শুরু করে নোডে যাওয়ার জন্য এমন কোনও পথ নেই যা নেওয়া যেতে পারে C
। সুতরাং, নোড B
নোড থেকে পৌঁছানো যায় না C
।
গ্রাফের প্রতিটি প্রারম্ভিক নোডের জন্য অ্যাক্সেসযোগ্য নোডগুলির তালিকা হিসাবে গ্রাফের পুনঃব্যবহারযোগ্যতাটি সংজ্ঞায়িত করুন । সুতরাং একই উদাহরণ হীরার গ্রাফের জন্য, পুনরুদ্ধারযোগ্যতাটি হ'ল:
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],[]]
:)। আপনি ধরে নিতে পারেন ইনপুট গ্রাফটি দুর্বলভাবে সংযুক্ত রয়েছে এবং এতে কোনও চক্র নেই (যেমন এটি একটি ডিএজি)।
আউটপুট
প্রদত্ত ইনপুট ডিএজি একটি ট্রানসিটিভ হ্রাস এবং অন্যথায় মিথ্যা মান বলে যদি আউটপুট সত্য হয়। এটি যে কোনও সিঙ্ক পছন্দসই হতে পারে (স্টিডিও, রিটার্ন মান, আউটপুট প্যারামিটার ইত্যাদি)
উদাহরণ
সমস্ত উদাহরণ 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 মিনিট সর্বাধিক)। স্ট্যান্ডার্ড লুফোলস প্রযোজ্য। আপনি পছন্দসই কোনও বিল্ট-ইন ব্যবহার করতে পারেন।