#810
Ruby I

동적 연결성과 쿼리 (Hard)

시간 제한
2s
메모리 제한
1024MB
제출
6
정답
3
맞힌 사람
3
정답 비율
50.0%

문제

Easy 버전과 Hard 버전의 차이는 쿼리의 암호화 여부 차이다.

NN개의 정점으로 이루어진 그래프가 주어진다. 각 정점에는 11부터 NN까지 번호가 매겨져 있고, 초기에는 각 정점 사이에 간선이 없다. 이때 다음 쿼리를 수행하는 프로그램을 작성해 보자.

  • 1 u v: uu번 정점과 vv번 정점 사이에 간선이 없으면 간선을 추가하고, 있으면 제거한다.
  • 2 u v: uu번 정점과 vv번 정점 사이에 경로가 존재하면 1을 출력하고, 없으면 0을 출력한다.

입력

첫째 줄에 NN과 쿼리의 개수 QQ가 주어진다. (2≤N,Q≤100 0002\le N, Q\le 100\,000)

둘째 줄부터 QQ개의 줄에 걸쳐 쿼리 복원에 필요한 세 정수 aa, bb, cc가 주어진다. (0≤a,b,c≤263−10 \le a, b, c \le 2^{63}-1)

쿼리는 다음과 같이 복원한다.

  • 쿼리 종류 =(a⊕X)mod  2+1=(a\oplus X) \mod 2 + 1
  • u=(b⊕X)mod  N+1u=(b\oplus X) \mod N + 1
  • v=(c⊕X)mod  N+1v=(c\oplus X)\mod N + 1

단, ⊕\oplus는 Bitwise-XOR 연산이다. XX는 초기에는 00이며, 매 쿼리 수행 이후 uu번 정점이 속한 연결 요소의 크기가 더해진다. u≠vu \neq v임이 보장된다.

출력

2번 쿼리의 답을 한 줄에 하나씩 출력한다.

예제 입력 1

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

예제 출력 1

0
0
0
1

힌트

예제 입력 1의 복원된 쿼리는 순서대로 다음과 같다.

2 3 2
2 1 2
1 1 3
1 3 2
1 1 3
2 1 3
1 3 1
2 2 3
문제를 만든 사람
조서현
알고리즘 분류
코드 제출

코드를 제출하려면 로그인이 필요합니다.

로그인
내 제출

제출 내역이 없습니다.

맞은 사람
#순위사용자언어시간메모리코드 길이
9869🥇
옥찬호
Rust400ms388788KB19624B
5567🥈
조서현
C#1038ms551124KB23198B
11108🥉
정우진
Python1225ms151980KB5145B
난이도 투표
Ruby I1명 투표· 7개월 전
로그인 후 AC 받으면 투표할 수 있습니다.
전체 제출
#사용자문제결과언어시간메모리코드 길이제출 시간
11108
맞았습니다
Python1225ms151980KB5145B2026. 10. 19. 05:30
9869
맞았습니다
Rust400ms388788KB19624B2026. 09. 16. 15:29
9868
틀렸습니다
Rust--19667B2026. 09. 16. 15:25
9867
틀렸습니다
Rust--19538B2026. 09. 16. 15:16
5567
맞았습니다
C#1038ms551124KB23198B2026. 04. 23. 10:45
5566
틀렸습니다
C#--23251B2026. 04. 23. 10:45