QOJ.ac

QOJ

Time Limit: 1.0 s Memory Limit: 1024 MB Total points: 100 Hackable ✓

#18602. Systemy rozproszone

Statistics

Firma posiada $n$ serwerów, ponumerowanych od $1$ do $n$. $i$-ty serwer uruchamia $a_i$ usług.

Czasami serwery mogą się wyłączać, dlatego dla każdego serwera zdefiniowano serwer zapasowy. Dla serwera o numerze $i$ serwerem zapasowym jest serwer o numerze $p_i$. Jeśli dla $i$-tego serwera $p_i = i$, to jest to serwer o wysokiej niezawodności i nigdy się nie wyłącza.

Dla dowolnych dwóch różnych serwerów $i$ i $j$ ich numery serwerów zapasowych $p_i$ i $p_j$ są różne. Zatem $p$ jest permutacją długości $n$, co oznacza, że każda liczba od $1$ do $n$ występuje dokładnie raz wśród wartości $p_1, \dots, p_n$.

Proces wyłączania serwerów przebiega następująco: jeśli serwer $i$ się wyłącza, wszystkie uruchomione na nim usługi są przenoszone na serwer o numerze $p_i$, a serwer $i$ jest zastępowany nowym serwerem, na którym nie są uruchomione żadne usługi. Numer tego serwera oraz numer jego serwera zapasowego pozostają bez zmian. Przenoszenie usług i wymiana serwera to bardzo szybki proces, podczas którego nie mogą wystąpić żadne nowe wyłączenia.

Firma planuje przeprowadzić test wydajności systemu. W tym celu zostanie wyłączonych co najwyżej $k$ serwerów. Wyłączenia są wykonywane sekwencyjnie, co oznacza, że żadne dwa serwery nie są wyłączane jednocześnie. Określ maksymalną liczbę usług, które mogą znaleźć się na jednym serwerze po wyłączeniu co najwyżej $k$ serwerów.

Wejście

Pierwszy wiersz zawiera dwie liczby całkowite $n$ i $k$ ($1 \leqslant k < n \leqslant 10^5$) — liczbę serwerów oraz maksymalną liczbę serwerów, które mogą zostać wyłączone.

Drugi wiersz zawiera $n$ liczb całkowitych $a_1, a_2, \dots, a_n$ ($0 \leqslant a_i \leqslant 10^9$) — liczby usług uruchomionych na serwerach.

Trzeci wiersz zawiera $n$ liczb całkowitych $p_1, p_2, \dots, p_n$ ($1 \leqslant p_i \leqslant n$) — numery serwerów zapasowych.

Wyjście

Wypisz jedną liczbę całkowitą — odpowiedź do zadania.

Podzadania

Podzadanie Punkty Ograniczenia Wymagane podzadania
1 15 $n \leqslant 1000, k = 1$
2 27 $n \leqslant 1000$ 1
3 21 $p_i = i \pmod n + 1$
4 37 1, 2, 3

Przykład

Wejście 1

4 2
6 10 7 9
2 3 4 1

Wyjście 1

26

Wejście 2

3 1
1000000000 993 2010
1 3 2

Wyjście 2

1000000000

Wejście 3

11 5
3 5 12 7 5 9 2 6 0 9 4
2 8 9 6 5 11 3 1 10 7 4

Wyjście 3

23

Uwagi

Rozważmy kolejność wyłączania serwerów, która pozwala osiągnąć maksymalną odpowiedź w pierwszym przykładzie.

Przypomnijmy, jak odbywa się przenoszenie usług przy wyłączaniu serwerów:

Serwer 1 2 3 4
Zapasowy 2 3 4 1

Najpierw wyłącza się drugi serwer; jego usługi przenoszą się na trzeci serwer, więc teraz na trzecim serwerze jest $10 + 7 = 17$ usług.

Następnie wyłącza się trzeci serwer; jego usługi przenoszą się na czwarty serwer, po czym na czwartym serwerze jest $9 + 17 = 26$ usług.

Dla lepszego zrozumienia zobacz poniższą tabelę, która przedstawia liczbę usług na każdym serwerze podczas opisanego powyżej procesu.

Etap $a_1$ $a_2$ $a_3$ $a_4$
Przed pierwszym wyłączeniem 6 10 7 9
Po wyłączeniu serwera 2 6 0 17 9
Po wyłączeniu serwera 3 6 0 0 26

Gdyby najpierw wyłączył się trzeci serwer, a potem drugi, proces wyglądałby następująco:

Etap $a_1$ $a_2$ $a_3$ $a_4$
Przed pierwszym wyłączeniem 6 10 7 9
Po wyłączeniu serwera 3 6 10 0 16
Po wyłączeniu serwera 2 6 0 10 16

W tym przypadku maksymalna liczba usług na serwerze wynosiłaby 16, co nie jest optymalną odpowiedzią.

W drugim przykładzie jedną z możliwych opcji jest niewyłączanie żadnego serwera. Wtedy na pierwszym serwerze znajduje się $1000000000$ usług, co jest odpowiedzią do zadania. Jeśli wyłączony zostanie serwer 2 lub 3, maksymalna liczba usług również będzie na pierwszym serwerze.

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.