아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

건강한 생활 습관

시간 제한2초메모리 제한512 MB

요약
연결된 무방향 그래프가 주어질 때, 두 정점 사이에 변을 공유하지 않는 두 경로가 존재하는지 묻는 질의에 답한다.
난이도

어려움10점 중 8점

유형
그래프, DFS, 유니온 파인드, 구현
정답자
아직 제출이 없습니다

문제

자카르타에는 1번부터 N번까지 번호가 붙은 N개의 교차로가 있고, M개의 양방향 도로로 연결되어 있다. 즉 도로 (u, v)는 도로 (v, u)와 같다. 서로 다른 두 교차로를 연결하는 도로는 최대 하나이며, 임의의 교차로에서 다른 임의의 교차로로 도로를 따라 이동할 수 있다. 지방 정부는 시민에게 건강한 생활 습관을 알리기 위해 조깅 행사를 열려고 한다. 조깅 코스는 교차로 s에서 시작해 다른 교차로 t에서 끝나는 교차로의 나열이며, 코스에서 인접한 두 교차로 사이에는 항상 도로가 존재한다. 예를 들어 s → v1 → v2 → · · · → vk → t와 같다. 조깅 코스가 도로 하나만 사용하는 경우도 가능하다. 예를 들어 s → t이다. 또한 하나의 교차로가 조깅 코스에 여러 번 나타날 수 있다. 예를 들어 s → x → y → x → t나 s → t → x → t와 같다.

물론 이런 행사에서는 선택한 조깅 코스에 사용된 도로를 모든 차량에 대해 통제해야 한다. 행사는 하루만 열리지만, 이 도로 통제는 경제에 큰 타격을 줄 수 있다. 그래서 지방 정부는 교차로 s에서 교차로 t로 가는 다른 경로 중 조깅 코스와 공통된 도로를 하나도 공유하지 않는 경로가 있는지 확인해야 한다. 반대로 두 경로가 교차로를 공유하는 것은 문제가 되지 않는다.

이 문제에서 해야 할 일은 각 질의 s, t에 대해 교차로 s에서 교차로 t로 가는 두 개의 서로 다른 경로(하나는 조깅 코스, 다른 하나는 대체 경로)가 공통된 도로를 하나도 공유하지 않도록 존재하는지 판별하는 것이다.

예를 들어 s → a → b → t와 s → b → c → t는 공통된 도로를 공유하지 않는다. 첫 번째 경로가 사용하는 도로는 (s, a), (a, b), (b, t)이고 두 번째 경로가 사용하는 도로는 (s, b), (b, c), (c, t)이다. 하지만 s → a → b → t와 s → b → a → t는 교차로 a와 교차로 b를 잇는 도로를 공유한다.

입력

첫 줄에는 세 정수 N M Q (1 ≤ N ≤ 100 000; 0 ≤ M ≤ 100 000; 1 ≤ Q ≤ 100 000)가 주어진다. 각각 교차로의 수, 도로의 수, 질의의 수이다. 다음 M개 줄에는 두 정수 u v (1 ≤ u < v ≤ N)가 주어지며, 교차로 u와 교차로 v를 잇는 양방향 도로를 나타낸다. 서로 다른 두 교차로를 연결하는 도로는 최대 하나이며, 임의의 교차로에서 다른 임의의 교차로로 도로를 따라 이동할 수 있다. 다음 Q개 줄에는 두 정수 s t (1 ≤ s < t ≤ N)가 주어지며, 질의를 나타낸다.

출력

각 질의에 대해 입력 순서대로, 교차로 s에서 교차로 t로 가는 공통된 도로를 공유하지 않는 두 개의 서로 다른 경로가 존재하면 “YES”(따옴표 제외), 존재하지 않으면 “NO”(따옴표 제외)를 한 줄에 출력한다.

예제2

  1. 예제 1

    입력
    4 4 2
    1 2
    1 3
    2 3
    3 4
    1 3
    1 4
    
    예상 출력
    YES
    NO
    
  2. 예제 2

    입력
    8 10 3
    1 2
    2 3
    3 4
    3 6
    4 5
    4 6
    5 6
    5 7
    5 8
    7 8
    1 8
    3 5
    4 7
    
    예상 출력
    NO
    YES
    YES