본문으로 이동
코드패스 by Devin.KR

문제 5663 · 기가 V

대화방이 처음 이어진 순간

인증 제출 통계 · 5분마다 갱신 · 정답 비율 = 정답 제출 / 전체 제출
시간 제한메모리 제한제출정답맞힌 사람정답 비율
1000ms / 테스트 (언어별 보정은 아래 표)메모리: 측정하지 않음(브라우저 채점)0000.00%

문제

사내 메신저에는 1번부터 N번까지 번호가 붙은 N명의 사원이 있고, 처음에는 모두 각자 혼자만 있는 대화방에 속해 있다. 운영 기록에는 M개의 합류 이벤트가 시간 순서대로 1번부터 M번까지 번호가 매겨져 있다. i번 이벤트 'a b'는 사원 a가 속한 대화방과 사원 b가 속한 대화방이 하나의 대화방으로 합쳐졌다는 뜻이다. 두 사원이 이미 같은 대화방에 속해 있다면 아무 일도 일어나지 않는다. 대화방은 합쳐지기만 하고 나뉘는 일은 없다.\n기록이 모두 끝난 뒤 Q개의 조회가 주어진다. 각 조회 'a b'는 사원 a와 사원 b가 처음으로 같은 대화방에 속하게 된 이벤트의 번호를 묻는다. 즉 1번부터 x번까지의 이벤트만 적용했을 때 두 사원이 같은 대화방에 속하는 가장 작은 x를 구한다. a와 b가 같은 사원이면 이벤트가 필요 없으므로 0을 출력하고, 모든 이벤트를 적용해도 같은 대화방에 속하지 못하면 -1을 출력한다. 조회끼리는 서로 영향을 주지 않으며, 조회의 개수가 많으므로 각 조회를 빠르게 처리해야 한다.

입력

첫 줄에 N, M, Q가 공백으로 구분되어 주어진다. (1 ≤ N ≤ 200000, 1 ≤ M ≤ 200000, 1 ≤ Q ≤ 200000) 다음 M줄에 각각 이벤트 a b가 주어진다. (1 ≤ a, b ≤ N, a = b도 가능하며 이때는 아무 일도 일어나지 않는다) 다음 Q줄에 각각 조회 a b가 주어진다. (1 ≤ a, b ≤ N)

출력

각 조회의 답을 입력 순서대로 한 줄에 하나씩 출력한다.

예제 입력 1

5 4 4
1 2
3 4
2 3
1 2
1 4
1 5
2 2
3 4

예제 출력 1

3
-1
0
2

예제 입력 2

3 2 2
2 3
1 2
1 3
2 3

예제 출력 2

2
1
힌트 펼치기
  • 이벤트 순서대로 합칠 때 경로 압축을 하지 않고 크기가 작은 쪽을 큰 쪽 아래에 붙이며, 붙인 순간의 이벤트 번호를 그 간선에 기록한다.
  • 트리 깊이가 O(log N)이므로 두 사원에서 위로 올라가되, 기록된 번호가 작은 쪽부터 올리면 만나는 순간까지의 최댓값이 답이다.

출처: Devin.KR 자체 제작

알고리즘 분류유니온 파인드오프라인 쿼리그래프

풀이 작성

연습 채점은 공개 테스트로 실행합니다. 인증 제출은 코드를 봉인한 뒤 새 입력을 실행하고 서버에서 출력을 대조하며 코드와 판정을 저장합니다.

Python 기본 시간 제한 = 문제 시간 제한 × 3 + 2초. 문제별 예외는 아래 표에 반영됩니다. 표준 라이브러리만 지원합니다.

Ctrl+Enter: 연습 채점 · Tab: 들여쓰기 · Esc 후 Tab: 다음 요소로 이동. 언어별 초안은 이 브라우저에 저장됩니다. JavaScript 입력: require('fs').readFileSync(0, 'utf8'), readline 또는 input().

로그인하면 인증 제출을 사용할 수 있습니다.

풀이를 제출하면 여기에서 결과를 확인할 수 있습니다.

    연습 기록은 이 브라우저에 최근 50개를 저장합니다. 인증 기록은 내 제출에서 확인하세요.

    이 브라우저의 연습 기록

      언어별 제한

      테스트 케이스마다 새 전역에서 실행하며 준비 시간은 제외합니다. 시간 초과된 출력은 검사하지 않습니다. 브라우저·기기 성능에 따라 실행 시간이 달라집니다.

      언어엔진(버전)시간 제한메모리
      javascript사용자 브라우저 JavaScript 엔진 (버전은 브라우저에 따라 다름)1000ms / 테스트측정하지 않음(브라우저 채점)
      pythonPyodide 314.0.7 (CPython 3.14 WASM)5000ms / 테스트측정하지 않음(브라우저 채점)