رالف خرابکار (Wreck-it Ralph)
رالف خرابکار در ماجراجویی خود یک درخت ریشهدار $n$ رأسی پیدا کرده که ریشه آن راس ۱ است. روی هر رأس این درخت یک عدد طبیعی نوشته شدهاست. رالف متوجه شد که این درخت از خاصیت جالبی برخوردار است. عدد نوشته شده روی هر رأس درخت از عدد نوشته شده روی پدرش بیشتر نیست. اما متاسفانه با کمی بازیبازی، رالف روی درخت خرابکاری کرد و اعداد درخت بهم ریخت. حالا رالف میخواهد این خاصیت را به درخت برگرداند. او درخت را پیش فلیکس برده و از او درخواست میکند تا درخت را برایش تعمیر کند.
برای درست کردن درخت، فلیکس میتواند از چکش خودش استفاده کند. با هر بار ضربه چکش به روی یک رأس، به مقدار نوشته شده روی آن رأس و تمام اجدادش (میگوییم راس $u$ جد راس $v$ است اگر و تنها اگر $u$ در مسیر رأس $v$ به ریشه حضور داشته باشد.) یکی اضافه میشود. فلیکس پس از بررسی بیشتر فهمید که اگر روی رأسی که برگ نیست چکش بزند، درخت میشکند و رالف ناراحت میشود، برای همین تصمیم گرفت تا تنها روی برگهای درخت چکش بزند (به یک رأس برگ میگوییم اگر و تنها اگر بچهای نداشته باشد).
فلیکس که از خرابکاریهای رالف خسته شده، میخواهد بداند که آیا میتواند درخت رالف را درست کند یا نه. همچنین اگر درخت رالف قابل درست کردن بود، باید به او بگویید حداقل چند ضربه چکش نیاز است تا درخت را درست کند و قبل از خرابکاری بعدی رالف به تعطیلات تابستانی برود.
ورودی
در خط اول ورودی عدد $n$ که برابر تعداد رأسهای درخت است میآید.
در خط بعد اعداد $p_2, p_3, \dots, p_n$ میآیند. رأس $p_i$-ام درخت، به رأس $i$-ام با یک یال متصل است.
در خط بعد اعداد $a_1, a_2, \dots, a_n$ که اعداد ابتدایی نوشته شده روی رأسها هستند میآیند.
خروجی
در تنها خط خروجی، اگر درخت قابل درست شدن بود کمینه تعداد ضربه مورد نیاز برای درست شدن درخت و در غیر این صورت $-1$ را چاپ کنید.
زیرمسئلهها
- زیرمسئله اول (۲ نمره): برای هر $2 \leq i \leq n$, $p_i = i-1$.
- زیرمسئله دوم (۲۰ نمره): هر رأس درخت حداکثر دو فرزند دارد.
- زیرمسئله سوم (۲۰ نمره): $n \leq 1000$ و برای هر $1 \leq i \leq n$، $1 \leq a_i \leq 1000$.
- زیرمسئله چهارم (۵۸ نمره): بدون محدودیت اضافی.
محدودیتها
- $2 \leq n \leq 10^5$
- $1 \leq p_i < i$
- $1 \leq a_i \leq 10^9$
ورودی و خروجی نمونه
| ورودی نمونه | خروجی نمونه |
|---|---|
5 1 2 1 2 2 7 10 3 12 | 13 |
3 1 2 1 2 3 | -1 |
راهنمایی
سعی کنید حالاتی را تشخیص دهید که جواب -۱ است.
راهنمایی
زمانی که یک راس دقیقا یک فرزند داشته باشد، تنها زمانیست که جواب میتواند -۱ باشد.
راهنمایی
از برنامهنویسی پویا $(dp)$ برای حل سوال استفاده کنید.
راهنمایی
قرار دهید $dp[v]$ پاسخ مسئله برای زیردرخت راس $v$ باشد.
راهنمایی
دقت کنید وقتی بخواهیم پاسخ را برای راس $x$ حساب کنیم، به صورت مجزا برای زیردرخت هر یک از فرزندانش میبایست اعمالی انجام دهیم تا به شرایط مطلوب برسند.
راهنمایی
در جواب بهینه، برای حل مسئله برای راس $x$ نیاز است هر یک از فرزندانش در کمینهی تعداد عمل ممکن به شرایط مطلوب برسند. حال برای خود راس $x$ و فرزندانش چه کنیم؟
راهنمایی
برای راس $x$ و فرزندانی از $x$ مثل $y_1, y_2, \dots, y_k$ که بعد از رسیدن زیردرختهایشان به شرایط مطلوب، مقداری بیش از راس $x$ دارند، $a_i$ را اختلاف مقدار راس $y_i$ با مقدار راس $x$ قرار میدهیم.
راهنمایی
معادل آنچه میخواهیم حل کنیم چنین است: در هر خانه از یک آرایهی $k$ عضوی، قصد داریم عددی صحیح و نامنفی بنویسیم، به طوری که برای هر خانه، مجموع اعداد دیگر خانهها حداقل $a_i$ شود. حداقل مجموع اعداد چند است؟
راهنمایی
اگر نیازی نبود مجموع اعداد را کمینه کنید، میتوانستید این کار را کنید؟
راهنمایی
پاسخ این سوال قابلیت جستوجوی دودویی را دارد. (به اصطلاح، $binary \, searchable$ است.)
راهنمایی
فرض کنید بخواهید بررسی کنید با مجموع اعداد $s$ میتوان به نتیجهی مطلوب رسید یا خیر. کافیست بر خانههای آرایه حرکت کنید و به ترتیب، در هر خانه حداکثر مقداری که شرط را نقض نمیکند قرار دهید.