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

می‌توانید سوال‌های خود را از بخش «سوال بپرسید» مطرح کنید.

توجه کنید که نمره‌دهی همه سوالات «درست» و «نادرست» است و تنها در صورتی که پاسخ همه تست‌ها را به درستی خروجی دهید؛ امتیاز کامل را دریافت می‌کنید. اما در سوال ۶ام (دو مستطیل) به ازای هر تستی که به درستی پاسخ دهید؛ نمره‌ی آن تست را دریافت می‌کنید.

ضرب گراف‌ها


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

امروز روز جهانیه ریاضیاته! و «نظریه گراف‌ها» یکی از مدل‌های باحال اونه...

توضیح تصویر

دکتر مهدی بهزاد

فرض کنید G=(V,E)G = (V, E) و G=(V,E)G' = (V', E') دو گراف ساده بدون جهت باشند. منظور G×GG \times G' یعنی گرافی که راس‌های آن V×VV \times V' (ضرب دکارتی) باشد و یک یال بین دو راس (v,v)(v, v') و (u,u)(u, u') وجود دارد اگر و تنها اگر v=uv = u و vuv'u' یالی در GG' باشد یا v=uv' = u' و vuvu یالی در GG باشد.

به همین ترتیب می‌توان تعریف را تعمیم داد و kk گراف را در هم ضرب کرد!

حال فرض کنید گراف GG داده شده است و منظور از GkG^k گرافی است که از kk بار ضرب شدن GG در خودش بدست می‌آید.

می‌دانیم راس‌های GkG^k دنباله‌هایی به طول kk از راس‌های GG خواهند بود. دو راس v1,v2,,vkv_1, v_2, \dots, v_k و u1,u2,,uku_1, u_2, \dots, u_k در این گراف را در نظر بگیرید. این دو راس به هم با یک یال متصل خواهند بود اگر و تنها اگر یک اندیس ii وجود داشته باشد که viv_i و uiu_i در گراف GG با یک یال به هم متصل باشند و به ازای همه‌ی اندیس‌های jj که iji \neq j داشته باشیم vj=ujv_j = u_j.

به شما دو راس از GkG^k داده می‌شود و شما باید طول کوتاه ترین مسیر بین این دو راس را محاسبه کنید.

ورودی🔗

در سطر اول ورودی دو عدد صحیح و مثبت nn و mm داده می‌شود که به ترتیب نشان‌دهنده‌ی تعداد راس‌ها و یال‌های GG است. 1n5001 \leq n \leq 500 0mn(n1)20 \leq m \leq \frac{n(n - 1)}{2} در mm سطر بعدی در هر سطر دو عدد صحیح و مثبت uu و vv آمده که نشان‌دهنده‌ی یال گراف GG است. 1uvn1 \leq u \neq v \leq n تضمین می‌شود هیچ یالی دوبار ظاهر نشود یعنی GG گرافی ساده خواهد بود.

در سطر بعدی عدد صحیح و مثبت kk آمده است. 1k500 0001 \leq k \leq 500 \ 000 در سطر بعدی kk عدد صحیح و مثبت v1,v2,,vkv_1, v_2, \dots, v_k با فاصله آمده است و در سطر بعدی kk عدد صحیح و مثبت u1,u2,,uku_1, u_2, \dots, u_k آمده است و به ترتیب نشان‌دهنده دو راس در GkG^k هستند. 1ui,vin 1 \le u_i, v_i \le n

خروجی🔗

در تنها سطر خروجی پاسخ مسئله یعنی کوتاه ترین مسیر بین این دو راس را چاپ کنید. در صورتی که مسیری بین این دو راس وجود نداشته باشد عدد منفی یک را چاپ کنید.

مثال🔗

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

3 2
1 2
2 3
3
1 2 3
1 3 1
Plain text

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

3
Plain text

گراف داده شده به صورت زیر است:

توضیح تصویر

دنباله مسیر از (1,2,3)(1, 2, 3) به (1,3,1)(1, 3, 1) به صورت زیر خواهد بود.

(1,2,3)(1,3,3)(1,3,2)(1,3,1)(1, 2, 3) \to (1, 3, 3) \to (1, 3, 2) \to (1, 3, 1)

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

4 2
1 2
3 4
2
1 4
2 2
Plain text

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

-1
Plain text

گراف داده شده به صورت زیر است:

توضیح تصویر

و هیچ مسیری از (1,4)(1, 4) به (2,2)(2, 2) وجود ندارد.

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