QOJ.ac

QOJ

时间限制: 2.0 s 内存限制: 1024 MB 总分: 100

#14502. Chiến thắng tinh thần

统计

Tính ngẫu nhiên hiện hữu ở khắp mọi nơi, xuyên suốt cuộc đời mỗi con người. Ngay cả trong những cuộc thi quan trọng nhất, yếu tố quyết định thắng bại đôi khi chỉ là vận may.

Vào năm 2035, có $n$ người hâm mộ cuồng nhiệt của trò chơi "Clash Royale" muốn so tài cao thấp. Để đảm bảo công bằng, họ quyết định đấu với nhau theo thể thức vòng tròn, tổng cộng diễn ra $\frac{n(n-1)}{2}$ trận đấu.

Tuy nhiên, vào thời điểm đó, "Clash Royale" đã hoàn toàn biến thành trò chơi "Oẳn tù tì"! Do đó, trong mỗi trận đấu, xác suất thắng của cả hai bên đều là 50% và độc lập với nhau.

Người chơi thua cuộc tất nhiên sẽ cảm thấy không cam tâm. Để đạt được "chiến thắng tinh thần", họ đưa ra khái niệm "chiến thắng gián tiếp": Định nghĩa $u$ là $k$-chiến thắng gián tiếp $v$ khi và chỉ khi tồn tại $k$ người $a_1, \dots, a_k$ sao cho $u$ thắng $a_1$, $a_1$ thắng $a_2$, $a_i$ thắng $a_{i+1}$ ($\forall i \in [1, k)$), và $a_k$ thắng $v$.

Đặc biệt, nếu $u$ trực tiếp thắng $v$, thì được gọi là 0-chiến thắng gián tiếp.

Các người chơi nảy sinh một thắc mắc mới: Với hai người chơi $u$ và $v$ cho trước, cần tối thiểu bao nhiêu tầng quan hệ gián tiếp để có thể nói $u$ thắng $v$?

Nói cách khác, bạn cần tìm số nguyên $k$ nhỏ nhất sao cho $u$ có thể $k$-chiến thắng gián tiếp $v$. Vì có rất nhiều người chơi không cam tâm, bạn cần trả lời $q$ truy vấn.

Dữ liệu vào

Lưu ý: Lượng dữ liệu vào của bài toán này khá lớn, khuyến khích sử dụng các phương thức đọc và ghi dữ liệu nhanh, ví dụ: trong C++ sử dụng scanf/printf hoặc cin/cout đã tắt đồng bộ hóa luồng. Khuyến khích tránh sử dụng các ngôn ngữ có tốc độ đọc ghi chậm.

Dòng đầu tiên chứa hai số nguyên $n, q$ ($2 \le n \le 5000, 1 \le q \le 10^5$).

$n-1$ dòng tiếp theo, dòng thứ $i$ là một chuỗi nhị phân độ dài $n-i$, trong đó chữ số thứ $j$ ($1 \le j \le n-i$) là 1 biểu thị người thứ $i$ thắng người thứ $i+j$, ngược lại nếu là 0 thì người thứ $i+j$ thắng người thứ $i$. Đảm bảo quan hệ thắng thua được tạo ra ngẫu nhiên độc lập với xác suất mỗi bên là 50%.

$q$ dòng tiếp theo, dòng thứ $i$ chứa hai số nguyên $u_i, v_i$ ($1 \le u_i, v_i \le n, u_i \neq v_i$) biểu thị truy vấn thứ $i$.

Dữ liệu ra

In ra $q$ dòng, dòng thứ $i$ chứa một số nguyên $k$ biểu thị giá trị $k$ nhỏ nhất sao cho $u_i$ là $k$-chiến thắng gián tiếp $v_i$. Đặc biệt, nếu với mọi $k$, $u_i$ không thể $k$-chiến thắng gián tiếp $v_i$, thì in ra -1.

Ví dụ

Ví dụ 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

Ví dụ 1

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

Ví dụ 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

Ví dụ 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.