پیمان در مسابقهی حفظ حدیث شرکت کرده است اما به دلیل مشغلهی بیش از حد نتوانسته خود را برای آزمون آماده کند. آزمون در شهر حدیثدانی برگزار میشود. نقشهی این شهر مانند یک درخت $n$ راسی است که رئوس آن با اعداد $0$ تا $n - 1$ شمارهگذاری شدهاند. برای آشنایی بیشتر شرکتکنندگان با احادیث، $m$ مسیر از درخت انتخاب و روی هرکدام از آنها یک حدیث متفاوت نوشته شده است. ممکن است یک مسیر بیش از یکبار انتخاب شده باشد. خوشبختانه پیمان کمی زودتر به شهر رسیده است و میخواهد دو راس انتخاب کرده و مسیر بین آن دو را بپیماید. در این صورت او تمام حدیثهایی را که تمام رئوس مسیر مربوط به آن حدیث، در مسیر انتخاب شده توسط او آمدهاند، یاد میگیرد. توجه کنید که جهت حرکت در مسیر مهم نیست. دانستن هر حدیث مقداری امتیاز دارد. پیمان را در انتخاب این دو راس کمک کنید تا مجموع امتیاز حدیثهایی که یاد میگیرد، بیشینه شود.
در این سوال شما باید تابع زیر را پیادهسازی کنید.
int getMaximumScore(int n, int p[], int m, int u[], int v[], int w[])
این تابع دقیقا یکبار فراخوانی میشود. آن را طوری پیادهسازی کنید تا بیشینهی مجموع امتیازی را که پیمان میتواند به دست آورد به عنوان خروجی برگرداند.
ارزیاب نمونه ورودی را به صورت زیر میخواند: در خط اول دو عدد $n$ و $m$ آمده است. سپس $n - 1$ خط آمده است که در هر خط یک عدد صحیح آمده است. عدد صحیح خط $i$ ام مقدار $p_{i - 1}$ است. در هر یک از $m$ خط بعدی سه عدد آمده است که سه عدد خط $i$ ام به ترتیب برابر $u_{i - 1}$، $v_{i - 1}$، $w_{i - 1}$ است.
ورودی نمونه | خروجی نمونه |
---|---|
4 3 0 0 0 0 2 2 1 3 99 1 2 98 | 100 |