لینک‌های مفید برای شرکت در مسابقه:

راه‌حل‌ها و راهنمایی‌های نهایی اضافه شدند.
این راهنمایی‌ها را می‌توانید در انتهای سوالات مشاهده کنید.
. می‌توانید سوالات خود را از قسمت "سوال بپرسید" مطرح کنید.

مسیر عجیب


  • محدودیت زمان: ۲ ثانیه
  • محدودیت حافظه: ۲۵۶ مگابایت

در کشور(!) شلمرود، nn شهر وجود دارد که با mm جاده دوطرفه به هم وصل شده‌اند.‌ طول جاده iiام هم wiw_i کیلومتر است. حسنی یک الاغ هم دارد که با استفاده از آن می‌تواند با سرعت یک کیلومتر بر ساعت جاده‌ها را طی کند.

حسنی جدیدا یک قابلیت جدید پیدا کرده که با استفاده از آن می‌تواند طول همه جاده‌ها را یک کیلومتر کم کند. حسنی فقط می‌تواند این قابلیت را وقتی درون یک شهر هست استفاده کند و tit_i ساعت طول می‌کشد که از این قابلیت در راس ii-ام استفاده کند. هم‌چنین اگر با استفاده از این قابلیت طول یک جاده صفر بشود آن جاده از شلمرود حذف می‌شود و نمی‌توان از آن عبور کرد.

حالا حسنی از شما می‌پرسد که کم‌ترین زمانی که طول می‌کشد تا از شهر شماره 11 به شهر شماره nn برسه چه قدر هست و از آن‌جا که شما هم حسنی را خیلی دوست دارید باید جوابش را بدهید.

ورودی🔗

در خط اول ورودی nn و mm آمده‌ است. سپس در خط بعدی nn عدد آمده که عدد ii-ام tit_i را نشان می‌دهد. در هر یک از mm خط بعدی هم سه عدد آمده که دو سر جاده و وزن آن جاده را مشخص می‌کند.

1n,m,ti,wi1 0001 \le n, m, t_i, w_i \le 1\ 000

خروجی🔗

در تنها خط خروجی کمترین زمان برای رسیدن از شهر شماره 11 به شهر شماره nn را چاپ کنید. در صورتی هم که مسیری از شهر 11 به شهر nn وجود نداشته باشد -1 چاپ کنید.

مثال🔗

ورودی نمونه ۱🔗

3 2
1 1000 1000
1 2 100
2 3 100
Plain text

خروجی نمونه ۱🔗

101
Plain text

در این نمونه وقتی که در شهر یک هستیم 9999 بار از قابلیت استفاده می‌کنیم و بعد از آن طول هر دو جاده یک می‌شود. بعد از آن می‌توان بعد از دو ساعت به شهر شماره سه رسید.

ورودی نمونه ۲🔗

3 2
3 1 1000
1 2 100
2 3 100
Plain text

خروجی نمونه ۲🔗

200
Plain text

در این مثال بدون استفاده از قابلیت می‌توان بعد از 200200 ساعت به شهر 33 رسید.

ورودی نمونه ۳🔗

4 2
1 2 3 4
1 2 5
2 3 10
Plain text

خروجی نمونه ۳🔗

-1
Plain text

در این نمونه مسیری از شهر 11 به شهر 44 وجود ندارد.


راهنمایی ۱

برای حل این سوال باید الگوریتم Dijkstra را بلد باشید.

راهنمایی ۲

به مجموعه‌ای از شهر‌ها و جاده‌ها گراف می‌گوییم و منظور از راس همان شهر و از یال همان جاده است.

اگر فرض کنید گراف اولیه برابر GG باشد. گراف GiG_i را به این صورت تعریف کنید که راس‌ها و یال‌های آن متنظار با راس‌ها و یال‌های GG است ولی طول هر یال آن منهای i شده و اگر منفی می‌شد، حذف شده است.

می‌توانید مشاهده کنید که GG همان G0G_0 است.

راهنمایی ۳

با استفاده از GiG_i‌ها گرافی بسازید که مسئله شما صرفا به مسئله کوتاه ترین مسیر تبدیل شود و پیچیدگی دیگری نداشته باشد.

دقت کنید که اگر روی راس v در گراف GiG_i‌ باشید می‌توانید در مدت زمان tvt_v به راس متناظر v در گراف Gi+1G_{i+1} بروید.

راهنمایی ۴

می‌توانید مشاهده کنید که G1001G_{1001} هیچ یالی ندارد چون wi1 000w_i \le1\ 000

راه حل

می‌خواهیم گراف جدیدی بسازیم که از اتصال GiG_iهای مخلتف است.

به این صورت این گراف را می‌سازیم که برای هر i (0i<10000 \le i \lt 1000) و هر راس مثل v در GiG_i، آن را توسط یک یال یک طرفه با وزن tvt_v به شهر متناظرش در Gi+1G_{i+1} وصل می‌کنیم.

می‌توانید مشاهده کنید که جواب معادل کوتاه ترین مسیر از شهر 1 درG0G_0 به یکی از شهر‌های n در یکی از GiG_iها است که طول مسیر کمینه شود از طرفی G1001G_{1001} به بعد چون هیچ یالی ندارند نیازی بهشون نداریم پس تعداد راس‌های ما برابر 1001×n1001 \times n و تعداد یال‌ها حداکثر 1001×m1001 \times m است که الگوریتم Dijkstra می‌تواند جواب مسئله را پیدا کند.

ارسال پاسخ برای این سؤال
در حال حاضر شما دسترسی ندارید.