سعید و رضا هر کدام یک گراف همبند وزندار $n$ رأسی دارند و تصمیم گرفته اند که با استفاده از آن ها بازی زیر را انجام دهند:
هدف دو بازیکن بیشینه کردن مجموع هزینه مراحل است. با فرض این که هر دو بازیکن بهترین بازی خود را انجام میدهند، شما باید این مقدار را بهدست آورید.
در سطر اول ورودی عدد $1 \leq n \leq 1000$ و $1 \leq s \leq n$ و $1 \leq t \leq n$ آمده است.
در ادامه شرح گراف سعید و رضا به ترتیب به صورت زیر آمده است:
در اولین سطر عدد $n-1 \leq m \leq 10^5$ نشاندهنده تعداد یالها و در $m$ سطر بعد در هر سطر سه عدد $ 1 \leq a_i \leq n$ و $ 1 \leq b_i \leq n$ و $1 \leq c_i \leq 10^6$ آمدهاست که نشان میدهد یک یال دوطرفه بین رئوس $a_i$ و $b_i$ با وزن $c_i$ وجود دارد.
در تنها سطر خروجی پاسخ سوال را چاپ نمایید، اگر این مقدار بی نهایت است، در خروجی $-1$ چاپ کنید.
ورودي نمونه | خروجي نمونه |
---|---|
5 1 5 5 1 2 2 1 4 2 2 3 1 3 4 1 5 3 1 4 1 2 2 2 4 2 2 3 1 2 5 2 | -1 |
3 1 3 4 1 2 10 2 3 10 1 3 20 2 3 30 4 2 1 10 1 3 10 1 1 10 2 3 10 | 20 |
پاسخ
برای حل این مسئله وضعیتهای بازی را با یک گراف مدل میکنیم. وضعیتهای این بازی را با زوج مرتب (رأسی فعلی، بازیکن فعلی) میتوان مشخص کرد و چون تعداد این وضعیتها $2n$ میباشد، گراف وضعیتها یک گراف 2n$ $ رأسی هست.
یالهای این گراف معادل حرکات مجاز در بازی میباشند. بنابراین اگر $a$ و $c$ را اسم بازیکنان و $b$ و $d$ را اسم دو رأس در نظر بگیریم، از رأس $(c, d)$ به رأس $(a, b)$ میتوان رفت اگر و فقط اگر هر دوشرط زیر برقرار باشد:
حال مسئله معادل این میشود که در گراف وضعیتها گشتی پیدا کنیم که از رأس $(saeed, s)$ شروع شود و جمع یالهای آن بیشینه شود.( $s$ رأسی بود که بازی از آن شروع میشد)
اگر در گراف وضعیتها، دوری وجود داشته باشد که از رأس مبدا قابل دسترسی باشد، در این صورت جواب مسئله بینهایت میشود (هر دو بازیکن بازی را همواره در آن دور ادامه می دهند). و اگر چنین دوری وجود نداشته باشد، جواب مسئله برابر طولانیترین مسیری است که از رأس مبدا شروع میشود. برای اینکه بفهمیم که آیا دور قابل دسترسی از رأس مبدا وجود دارد میتوانیم از DFS استفاده کنیم. چنین دوری وجود دارد اگر و فقط اگر در اجرای DFS از رأس مبدا حداقل یک یال برگشتی مشاهده کنیم.
اگر یال برگشتی مشاهده کردیم که جواب مسئله بینهایت میشود. در غیر این صورت وضعیتهای قابل دسرسی از رأس مبدأ یک گراف بدون دور را تشکیل میدهند و میتوان طولانیترین مسیر در آن را با استفاده از روش پویا محاسبه کرد.
پيچيدگي
گراف وضعیتها $2n$ تا رأس و حداکثر به اندازهی جمع یالهای گراف سعید و رضا یال دارد و چون اجرای DFS از $O(v + e)$ زمان می برد، کل الگوریتم از $O(n + m)$ اجرا میشود.