문제 설명
정수 0 ~ n-1을 담고 있는 크기가 n인 1차원 정수 배열 a가 있습니다.
배열의 각 원소마다 하나의 집합을 이루고 있습니다.
당신은 여기에 다음 쿼리들을 실행하려고 합니다.
- [1,
x,y] 형태의 쿼리가 주어집니다.y가 포함된 집합의 원소들을 모두x가 포함된 집합으로 옮깁니다.x와y가 같은 집합에 속해있다면 해당 쿼리는 실행하지 않습니다.
- [2,
x,y] 형태의 쿼리가 주어집니다.- 새로운 집합을 생성합니다.
x와y가 포함된 집합에서x와 같거나 늦게 집합으로 들어왔으면서y와 같거나 빠르게 집합으로 들어온 원소들을 새로 생성한 집합으로 옮깁니다.- 집합에 들어온 순서는 몇 번째 쿼리로 집합에 들어왔는지로 판별합니다. 같은 쿼리로 집합에 들어왔다면 같은 순서로 집합에 들어왔다는 것을 의미합니다.
x와y는 항상 같은 집합에 포함되어 있습니다.
- [3,
x,y] 형태의 쿼리가 주어집니다.x와y가 같은 집합에 속해있다면"Yes"를, 그렇지 않다면"No"를 return 할 배열의 뒤에 추가합니다.
집합은 크기가 0이 되면 사라지며, 초기 집합들은 0번째 쿼리로 형성됩니다.
a의 길이를 나타내는 정수 n, 쿼리들을 담은 2차원 정수 배열 queries가 매개변수로 주어집니다. 쿼리들을 순서대로 실행했을 때, 3번 쿼리의 결과를 순서대로 담아 return 하도록 solution 함수를 완성해주세요.
제한사항
- 1 ≤
n≤ 500,000 - 1 ≤
queries의 길이 ≤ 500,000queries[i]는i+1번째로 실행할 쿼리를 나타내며, [q,x,y] 형태의 1차원 정수 배열입니다.- 1 ≤
q≤ 3 - 0 ≤
x,y<n - 2번 쿼리의 경우
x와y는 항상 같은 집합에 속해 있습니다. - 3번 쿼리는 1개 이상 주어집니다.
입출력 예
| n | queries | result |
|---|---|---|
| 4 | [[3, 2, 3], [1, 3, 2], [3, 2, 3], [1, 2, 0], [3, 0, 1], [2, 2, 0], [3, 2, 3], [3, 0, 2]] | ["No", "Yes", "No", "No", "Yes"] |
| 7 | [[1, 0, 1], [1, 2, 3], [3, 1, 3], [1, 2, 0], [3, 1, 3], [1, 1, 5], [1, 5, 4], [3, 4, 5], [2, 2, 5], [3, 4, 5]] | ["No", "Yes", "Yes", "No"] |
입출력 예 설명
입출력 예 #1
초기 집합은 다음과 같습니다.
[0], [1], [2], [3]
[3, 2, 3]쿼리를 실행했을 때 결과는 다음과 같습니다.- 2와 3은 다른 집합에 들어있으므로 return 할 배열의 뒤에
"No"를 추가합니다.
- 2와 3은 다른 집합에 들어있으므로 return 할 배열의 뒤에
[1, 3, 2]쿼리를 실행했을 때 결과는 다음과 같습니다.- 2가 들어있는 [2]의 원소들을 모두 3이 들어있는 [3]으로 옮깁니다.
- 쿼리를 실행한 뒤의 집합은 [0], [1], [2, 3]이 있습니다.
[3, 2, 3]쿼리를 실행했을 때 결과는 다음과 같습니다.- 2와 3은 같은 집합에 있으므로 return 할 배열의 뒤에
"Yes"를 추가합니다.
- 2와 3은 같은 집합에 있으므로 return 할 배열의 뒤에
[1, 2, 0]쿼리를 실행했을 때의 결과는 다음과 같습니다.- 0이 들어있는 [0]의 모든 원소들을 2가 들어있는 [2, 3]으로 옮깁니다.
- 쿼리를 실행한 뒤의 집합은 [0, 2, 3], [1]이 있습니다.
[3, 0, 1]쿼리를 실행했을 때의 결과는 다음과 같습니다.- 0과 1은 다른 집합에 들어있으므로 return 할 배열의 뒤에
"No"를 추가합니다.
- 0과 1은 다른 집합에 들어있으므로 return 할 배열의 뒤에
[2, 2, 0]쿼리를 실행했을 때의 결과는 다음과 같습니다.- 2는 2번째 쿼리로 현재 집합에 들어왔고, 0은 4번째 쿼리로 현재 집합에 들어왔습니다.
- 2와 0이 속한 [0, 2, 3]에서 2~4번째 쿼리에 들어온 원소인 0과 2로 새로운 집합을 만듭니다.
- 쿼리를 실행한 뒤의 집합은 [0, 2], [1], [3]이 있습니다.
[3, 2, 3]쿼리를 실행했을 때의 결과는 다음과 같습니다.- 2와 3은 다른 집합에 들어있으므로 return 할 배열의 뒤에
"No"를 추가합니다.
- 2와 3은 다른 집합에 들어있으므로 return 할 배열의 뒤에
[3, 0, 2]쿼리를 실행했을 때의 결과는 다음과 같습니다.- 0과 2는 같은 집합에 들어있으므로 return 할 배열의 뒤에
"Yes"를 추가합니다.
- 0과 2는 같은 집합에 들어있으므로 return 할 배열의 뒤에
return 할 배열은 ["No", "Yes", "No", "No", "Yes"]입니다.
입출력 예 #2
초기 집합은 다음과 같습니다.
[0], [1], [2], [3], [4], [5], [6]
쿼리를 실행하는 과정은 다음과 같습니다.
[1, 0, 1]쿼리를 실행했을 때 결과는 다음과 같습니다.- 1이 들어있는 [1]의 원소들을 모두 0이 들어있는 [0]으로 옮깁니다.
- 쿼리를 실행한 뒤의 집합은 [0, 1], [2], [3], [4], [5], [6]이 있습니다.
[1, 2, 3]쿼리를 실행했을 때 결과는 다음과 같습니다.- 3이 들어있는 [3]의 원소들을 모두 2가 들어있는 [2]로 옮깁니다.
- 쿼리를 실행한 뒤의 집합은 [0, 1], [2, 3], [4], [5], [6]이 있습니다.
[3, 1, 3]쿼리를 실행했을 때 결과는 다음과 같습니다.- 1과 3은 다른 집합에 있으므로 return 할 배열의 뒤에
"No"를 추가합니다.
- 1과 3은 다른 집합에 있으므로 return 할 배열의 뒤에
[1, 2, 0]쿼리를 실행했을 때 결과는 다음과 같습니다.- 0이 들어있는 [0, 1]의 원소들을 모두 2가 들어있는 [2, 3]으로 옮깁니다.
- 쿼리를 실행한 뒤의 집합은 [0, 1, 2, 3], [4], [5], [6]이 있습니다.
[3, 1, 3]쿼리를 실행했을 때 결과는 다음과 같습니다.- 1과 3은 같은 집합에 있으므로 return 할 배열의 뒤에
"Yes"를 추가합니다.
- 1과 3은 같은 집합에 있으므로 return 할 배열의 뒤에
[1, 1, 5]쿼리를 실행했을 때 결과는 다음과 같습니다.- 5가 들어있는 [5]의 원소들을 모두 1이 들어있는 [0, 1, 2, 3]으로 옮깁니다.
- 쿼리를 실행한 뒤의 집합은 [0, 1, 2, 3, 5], [4], [6]이 있습니다.
[1, 5, 4]쿼리를 실행했을 때 결과는 다음과 같습니다.- 4가 들어있는 [4]의 원소들을 모두 5가 들어있는 [0, 1, 2, 3, 5]로 옮깁니다.
- 쿼리를 실행한 뒤의 집합은 [0, 1, 2, 3, 4, 5], [6]이 있습니다.
[3, 4, 5]쿼리를 실행했을 때 결과는 다음과 같습니다.- 4와 5는 같은 집합에 있으므로 return 할 배열의 뒤에
"Yes"를 추가합니다.
- 4와 5는 같은 집합에 있으므로 return 할 배열의 뒤에
[2, 2, 5]쿼리를 실행했을 때 결과는 다음과 같습니다.- 2와 5가 들어있는 [0, 1, 2, 3, 4, 5] 집합에서 쿼리가 실행됩니다.
- 2는 0번째 쿼리로 집합에 들어왔고, 5는 6번째 쿼리로 집합에 들어왔습니다.
- 0~6번째 쿼리에 [0, 1, 2, 3, 4, 5] 집합에 들어온 원소는 0, 1, 2, 3, 5 입니다.
- 쿼리를 실행한 뒤의 집합은 [0, 1, 2, 3, 5], [4], [6]이 있습니다.
[3, 4, 5]쿼리를 실행했을 때 결과는 다음과 같습니다.- 4와 5는 다른 집합에 있으므로 return 할 배열의 뒤에
"No"를 추가합니다.
- 4와 5는 다른 집합에 있으므로 return 할 배열의 뒤에
return 할 배열은 ["No", "Yes", "Yes", "No"]입니다.
실행 결과
실행 중지
실행 결과가 여기에 표시됩니다.