QOJ.ac

QOJ

Time Limit: 2.0 s Memory Limit: 1024 MB Total points: 100

#14502. Zwycięstwo duchowe

Statistics

Losowość jest wszechobecna i towarzyszy nam przez całe życie. Nawet w najważniejszych zawodach o zwycięstwie często decyduje po prostu szczęście.

W 2035 roku $n$ zagorzałych fanów gry "Clash Royale" chce sprawdzić, kto z nich jest lepszy. Dla sprawiedliwości postanowili rozegrać mecze każdy z każdym, co daje łącznie $\frac{n(n-1)}{2}$ spotkań.

Jednak w tamtym czasie "Clash Royale" całkowicie zmieniło się w "papier, kamień, nożyce"! Dlatego w każdym meczu prawdopodobieństwo wygranej obu stron wynosi 50% i jest od siebie niezależne.

Przegrani gracze naturalnie czują niedosyt. Aby osiągnąć "zwycięstwo duchowe", wprowadzili pojęcie "pośredniego zwycięstwa": Mówimy, że $u$ odnosi $k$-pośrednie zwycięstwo nad $v$ wtedy i tylko wtedy, gdy istnieje $k$ osób $a_1, \dots, a_k$ takich, że $u$ wygrał z $a_1$, $a_1$ wygrał z $a_2$, $a_i$ wygrał z $a_{i+1}$ (dla $i \in [1, k)$), a $a_k$ wygrał z $v$.

W szczególności, jeśli $u$ bezpośrednio wygrał z $v$, nazywamy to 0-pośrednim zwycięstwem.

Gracze zadali sobie nowe pytanie: mając dwóch graczy $u$ oraz $v$, ile minimalnie warstw pośrednich relacji potrzeba, aby stwierdzić, że $u$ wygrał z $v$?

Innymi słowy, musisz wyznaczyć minimalną liczbę całkowitą $k$, taką że $u$ może odnieść $k$-pośrednie zwycięstwo nad $v$. Ponieważ graczy czujących niedosyt jest wielu, musisz odpowiedzieć na $q$ zapytań.

Wejście

Uwaga: Wejście w tym zadaniu jest duże, zaleca się stosowanie szybkich metod wczytywania i wypisywania danych, np. w C++ użycie scanf/printf lub wyłączenie synchronizacji strumieni cin/cout. Zaleca się unikanie języków z wolnym wejściem/wyjściem.

Pierwsza linia zawiera dwie liczby całkowite $n, q$ ($2 \le n \le 5000, 1 \le q \le 10^5$).

Następnie $n-1$ linii, gdzie $i$-ta linia zawiera ciąg binarny o długości $n-i$. Jeśli $j$-ty ($1 \le j \le n-i$) znak to 1, oznacza to, że osoba $i$ wygrała z osobą $i+j$, w przeciwnym razie osoba $i+j$ wygrała z osobą $i$. Gwarantuje się, że relacje zwycięstwa są generowane niezależnie i losowo, z prawdopodobieństwem 50%.

Następnie $q$ linii, gdzie $i$-ta linia zawiera dwie liczby całkowite $u_i, v_i$ ($1 \le u_i, v_i \le n, u_i \neq v_i$), reprezentujące $i$-te zapytanie.

Wyjście

Wypisz $q$ linii. W $i$-tej linii wypisz jedną liczbę całkowitą $k$ oznaczającą minimalne $k$, dla którego $u_i$ odnosi $k$-pośrednie zwycięstwo nad $v_i$. W szczególności, jeśli dla żadnego $k$ gracz $u_i$ nie może odnieść $k$-pośredniego zwycięstwa nad $v_i$, wypisz -1.

Przykład

Wejście 1

4 12
110
11
1
1 2
1 3
1 4
2 1
2 3
2 4
3 1
3 2
3 4
4 1
4 2
4 3

Wyjście 1

0
0
1
1
0
0
1
2
0
0
1
1

Wejście 2

5 20
0011
001
01
1
1 2
1 3
1 4
1 5
2 1
2 3
2 4
2 5
3 1
3 2
3 4
3 5
4 1
4 2
4 3
4 5
5 1
5 2
5 3
5 4

Wyjście 2

1
1
0
0
0
2
1
0
0
0
1
0
1
0
0
0
-1
-1
-1
-1

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.