QOJ.ac

QOJ

حد الوقت: 8 s حد الذاكرة: 512 MB مجموع النقاط: 100

#18819. 트리와 쿼리 16

الإحصائيات

$N$개의 정점으로 이루어진 포레스트가 있다. 정점은 1번부터 $N$번까지 번호가 매겨져 있다. 초기 포레스트에 간선은 없다.

아래의 쿼리를 수행하는 프로그램을 작성하시오.

  • 1 u v: 두 정점 $u$, $v$ 를 잇는 간선을 포레스트에 추가하라. 이 쿼리가 호출되기 이전에, 포레스트 상에서 $u$와 $v$를 잇는 경로가 없음이 보장된다.
  • 2 u k: $dist(u, v)$ 를 두 정점 $u, v$ 간의 최단 경로의 길이라고 정의하자. 만약 두 정점이 연결되어 있지 않다면 값은 $\infty$ 이다. $dist(u, v) = k$ 인 정점 $v$ 의 개수를 반환하라.

입력

첫 번째 줄에 두 정수 $N, Q$ 가 주어진다. ($1 \le N \le 100\,000, 1 \le Q \le 200\,000$)

이후 $Q$ 개의 줄에 세 정수로 쿼리의 정보 $t_i, a_i, b_i$ 가 주어진다. ($1 \le t_i \le 2, 0 \le a_i, b_i < n$)

$last$ 라는 추가 변수를 생각하자. 이 변수는 초기에 0이라는 값을 가진다.

  • $t_i = 1$ 일 경우, 쿼리의 인자 $u_i, v_i$는 다음과 같이 정의된다: $u_i = ((a_i + last) \bmod n) + 1, v_i = ((b_i + last) \bmod n) + 1$
  • $t_i = 2$ 일 경우, 쿼리의 인자 $u_i, k_i$ 는 다음과 같이 정의된다: $u_i = ((a_i + last) \bmod n) + 1, k_i = ((b_i + last) \bmod n)$ 이 쿼리에 대한 답을 계산한 후, $last$ 를 해당 쿼리의 답으로 갱신한다.

출력

$t_i = 2$ 형태의 쿼리의 답을 한 줄씩 출력한다.

Sample

Input

7 9
1 0 6
1 4 3
1 0 5
1 1 2
1 3 1
1 4 5
2 2 3
2 2 1
2 0 0

Output

1
2
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.