Gửi bài giải


Điểm: 20
Giới hạn thời gian: 1.5s
Giới hạn bộ nhớ: 256M
đầu vào: stdin
Đầu ra: stdout

Tác giả:
Kiểu bài tập

Cho một đồ thị hàm số gồm \(N\) đỉnh được đánh số từ \(0\) đến \(N-1\). Mỗi đỉnh \(i\) có đúng một cung đi ra hướng tới \(next[i]\). Vì số lượng đỉnh hữu hạn, nếu ta đi liên tiếp từ một đỉnh bất kỳ, ta chắc chắn sẽ lặp lại các đỉnh đã đi qua và rơi vào một chu kỳ (cycle).

Với mỗi truy vấn từ đỉnh \(U\), hãy xác định:

  1. Đỉnh đầu tiên thuộc chu kỳ mà ta gặp được khi xuất phát từ \(U\) (đỉnh vào chu kỳ - entry node).
  2. Độ dài của chu kỳ đó.
  3. Khoảng cách (số bước đi) từ \(U\) tới đỉnh vào chu kỳ đó.

Định dạng đầu vào

  • Dòng đầu chứa hai số nguyên dương \(N\) và \(Q\) (\(1 \le N, Q \le 10^5\)).
  • Dòng hai chứa \(N\) số nguyên đại diện cho mảng \(next\) (\(0 \le next[i] < N\)).
  • \(Q\) dòng tiếp theo, mỗi dòng chứa một số nguyên \(U\) (\(0 \le U < N\)) đại diện cho đỉnh xuất phát.

Định dạng đầu ra

  • Với mỗi truy vấn, in ra trên một dòng gồm ba số nguyên: entry_node, cycle_length, và distance.

Ràng buộc & Subtasks

  • Subtask 1 (30% số điểm): \(N, Q \le 1000\).
  • Subtask 2 (70% số điểm): \(N, Q \le 10^5\).

Ví dụ

Input:

6 3
1 2 3 1 5 4
0
3
4

Output:

1 3 1
3 3 0
4 2 0

Giải thích:

  • Đồ thị chứa các cung: \(0 \to 1 \to 2 \to 3 \to 1\) (chu kỳ \(\{1, 2, 3\}\) độ dài 3) và \(4 \to 5 \to 4\) (chu kỳ \(\{4, 5\}\) độ dài 2).
  • Truy vấn 1 (\(U = 0\)): Đường đi là \(0 \to 1 \to 2 \to 3 \to 1\). Đỉnh đầu tiên thuộc chu kỳ gặp được là 1, độ dài chu kỳ là 3, khoảng cách từ 0 tới 1 là 1 bước.
  • Truy vấn 2 (\(U = 3\)): 3 đã nằm trong chu kỳ \(\{1, 2, 3\}\). Đỉnh vào chu kỳ là chính nó, độ dài chu kỳ là 3, khoảng cách là 0.
  • Truy vấn 3 (\(U = 4\)): 4 đã nằm trong chu kỳ \(\{4, 5\}\). Đỉnh vào chu kỳ là 4, độ dài chu kỳ là 2, khoảng cách là 0.

Nhận xét

Không có ý kiến tại thời điểm này.