لینکهای مفید برای شرکت در مسابقه:
راهحلها و راهنماییهای نهایی اضافه شدند.
این راهنماییها را میتوانید در انتهای سوالات مشاهده کنید.
.
میتوانید سوالات خود را از قسمت "سوال بپرسید" مطرح کنید.
در کشور(!) شلمرود، شهر وجود دارد که با جاده دوطرفه به هم وصل شدهاند. طول جاده ام هم کیلومتر است. حسنی یک الاغ هم دارد که با استفاده از آن میتواند با سرعت یک کیلومتر بر ساعت جادهها را طی کند.
حسنی جدیدا یک قابلیت جدید پیدا کرده که با استفاده از آن میتواند طول همه جادهها را یک کیلومتر کم کند. حسنی فقط میتواند این قابلیت را وقتی درون یک شهر هست استفاده کند و ساعت طول میکشد که از این قابلیت در راس -ام استفاده کند. همچنین اگر با استفاده از این قابلیت طول یک جاده صفر بشود آن جاده از شلمرود حذف میشود و نمیتوان از آن عبور کرد.
حالا حسنی از شما میپرسد که کمترین زمانی که طول میکشد تا از شهر شماره به شهر شماره برسه چه قدر هست و از آنجا که شما هم حسنی را خیلی دوست دارید باید جوابش را بدهید.
در خط اول ورودی و آمده است. سپس در خط بعدی عدد آمده که عدد -ام را نشان میدهد. در هر یک از خط بعدی هم سه عدد آمده که دو سر جاده و وزن آن جاده را مشخص میکند.
در تنها خط خروجی کمترین زمان برای رسیدن از شهر شماره به شهر شماره را چاپ کنید. در صورتی هم که مسیری از شهر به شهر وجود نداشته باشد -1
چاپ کنید.
در این نمونه وقتی که در شهر یک هستیم بار از قابلیت استفاده میکنیم و بعد از آن طول هر دو جاده یک میشود. بعد از آن میتوان بعد از دو ساعت به شهر شماره سه رسید.
در این مثال بدون استفاده از قابلیت میتوان بعد از ساعت به شهر رسید.
در این نمونه مسیری از شهر به شهر وجود ندارد.
برای حل این سوال باید الگوریتم Dijkstra را بلد باشید.
به مجموعهای از شهرها و جادهها گراف میگوییم و منظور از راس همان شهر و از یال همان جاده است.
اگر فرض کنید گراف اولیه برابر باشد. گراف را به این صورت تعریف کنید که راسها و یالهای آن متنظار با راسها و یالهای است ولی طول هر یال آن منهای i شده و اگر منفی میشد، حذف شده است.
میتوانید مشاهده کنید که همان است.
با استفاده از ها گرافی بسازید که مسئله شما صرفا به مسئله کوتاه ترین مسیر تبدیل شود و پیچیدگی دیگری نداشته باشد.
دقت کنید که اگر روی راس v در گراف باشید میتوانید در مدت زمان به راس متناظر v در گراف بروید.
میتوانید مشاهده کنید که هیچ یالی ندارد چون
میخواهیم گراف جدیدی بسازیم که از اتصال های مخلتف است.
به این صورت این گراف را میسازیم که برای هر i () و هر راس مثل v در ، آن را توسط یک یال یک طرفه با وزن به شهر متناظرش در وصل میکنیم.
میتوانید مشاهده کنید که جواب معادل کوتاه ترین مسیر از شهر 1 در به یکی از شهرهای n در یکی از ها است که طول مسیر کمینه شود از طرفی به بعد چون هیچ یالی ندارند نیازی بهشون نداریم پس تعداد راسهای ما برابر و تعداد یالها حداکثر است که الگوریتم Dijkstra میتواند جواب مسئله را پیدا کند.