ساعت
۹۰۱۲۳۴۵۶۷۸۹۰۹۰۱۲۳۴۵۶۷۸۹۰
ساعت
دقیقه
۹۰۱۲۳۴۵۶۷۸۹۰۹۰۱۲۳۴۵۶۷۸۹۰
دقیقه
ثانیه
۹۰۱۲۳۴۵۶۷۸۹۰۹۰۱۲۳۴۵۶۷۸۹۰
ثانیه
  • محدودیت زمان: ۳ ثانیه
  • محدودیت حافظه: ۲۵۶ مگابایت

معلم حنا هدیه تولد به او یک درخت ریشه‌دار nn راسی داده که ریشه آن راس شماره 11 است. روی راس شماره ii آن عدد aia_i نوشته‌ شده‌‌است. حنا بعد از یادگرفتن الگوریتم جستجوی عمق اول تکه کد زیر را نوشته است.

b := an array of length n
time := 1

procedure DFS(T, a, v):
	b[time] = a[v]
	time += 1
	label v as visited
	for u in T.neighbors(v) do:
		if not visited[u] do:
			DFS(T, a, u)
		end if
	end for
end procedure

procedure countInversions()
	DFS(T, a, 1)
	return number of inversions in the array b
	/* Number of inversions in the array b is the number of distinct pairs (i, j) such that 1 <= i < j <= n and b[i] > b[j] */
end procedure

Plain text

حنا می‌خواهد تابع countInversions‍ را فراخوانی کند. او می‌داند که خروجی این تابع به ترتیب همسایه‌های هر راس در تابع DFS‍ وابسته است. به او کمک کنید، کمینه خروجی ممکن این تابع را پیدا کند.

در واقع حنا می‌خواهد طوری ترتیب همسایه‌های رئوس را انتخاب کند که تعداد نابه‌جایی‌های آرایه b کمینه بشود.

منظور از نابه‌جایی تعداد جفت‌های 1i<jn1 \le i < j \le n است که ai>aja_i > a_j باشد.

ورودی

در سطر اول ورودی عدد nn آمده‌است.

در سطر دوم، اعداد a1,a2,...,ana_1, a_2, ..., a_n به ترتیب آمده‌اند.

در سطر سوم، اعداد p2,p3,...,pnp_2, p_3, ..., p_n، به ترتیب آمده‌اند که pip_i پدر راس شماره ii درخت معلم است.

1n1,000,000 1 \leq n \leq 1 , 000 , 000 0ai2 0 \leq a_i \leq 2 1pi<i 1 \leq p_i < i

خروجی

در سطر اول خروجی، کمینه خروجی تابع countInversions را چاپ کنید.

مثال

ورودی نمونه ۱

6
0 0 2 0 0 2
1 2 3 2 2

Plain text

خروجی نمونه ۱

1
Plain text

ورودی نمونه ۲

8
0 1 1 2 1 0 1 2
1 2 2 1 1 2 3

Plain text

خروجی نمونه ۲

0
Plain text

ورودی نمونه ۳

10
2 0 1 1 1 2 1 0 0 0
1 2 2 1 5 5 5 5 5
Plain text

خروجی نمونه ۳

16
Plain text

ارسال پاسخ برای این سؤال
فایلی انتخاب نشده است.