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

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

간선 파괴

시간 제한3초메모리 제한128 MB

요약
각 질의마다 l번부터 r번까지 간선을 지운 뒤 남은 연결 요소 개수를 구합니다.
난이도

어려움10점 중 8점

유형
그래프, 유니온 파인드, 분할 정복
정답자
아직 제출이 없습니다

문제

승현이는 전국 정보 올림피아드 본선을 앞두고 그래프 이론을 공부한다. 요즘은 깊이 우선 탐색(DFS)과 너비 우선 탐색(BFS)에 푹 빠져서, 정점 VV개와 간선 EE개로 이루어진 무향 그래프의 컴포넌트 수를 세는 문제를 붙잡고 있다. 정점에는 1,2,…,V1, 2, \dots, V의 번호를, 간선에는 1,2,…,E1, 2, \dots, E의 번호를 붙였고, 같은 두 정점을 잇는 간선은 많아야 하나다.

무향 그래프가 간선으로 이어지지 않은 여러 덩어리로 나뉘어 있을 때, 서로 이어진 정점의 부분집합 하나하나를 컴포넌트라고 한다. 아래 [그림 1]에서는 {1, 2, 5, 8}, {3}, {4, 6, 7}이 각각 컴포넌트다. [그림 2]처럼 그래프 전체가 컴포넌트 하나일 수도 있다.

승현이는 문제를 보자마자 DFS로 올바른 코드를 짰지만 0점을 받았다. 선생님이 "재귀 함수를 썼다"며 채점조차 하지 않았기 때문이다. 화가 난 승현이는 destroy(l, r) 함수로 l,l+1,…,rl, l+1, \dots, r번 간선을 한꺼번에 파괴하기 시작했다. 번호가 연속인 이유는 그래야 파괴하기 편해서라고 한다.

[그림 3] 간선 위에 적힌 빨간 번호가 그 간선의 번호다. 승현이가 destroy(3, 5)를 호출해 3, 4, 5번 간선이 파괴됐다.

여러분은 재귀 없이도 컴포넌트 수를 셀 수 있으니, 간선이 파괴된 그래프의 컴포넌트 수를 구한 다음 recover(l, r)로 파괴된 간선을 되돌려 놓아 승현이를 약올리려 한다.

[그림 4] 파괴된 그래프의 컴포넌트 수 2를 구한 뒤 recover(3, 5)로 간선을 복구했다.

그런데 승현이가 destroy를 계속 호출하는 바람에 일일이 대응하기가 벅차졌다. 이 일을 대신 해 줄 프로그램을 작성하라.

입력

첫째 줄에 그래프의 정점 수 VV와 간선 수 EE가 공백을 사이에 두고 주어진다.

이어지는 EE개 줄 중 ii번째 줄에는 두 정수 uiu_i, viv_i가 공백을 사이에 두고 주어진다. ii번 간선이 정점 uiu_i와 viv_i를 잇는다는 뜻이다. 그래프는 무향이고, 두 정점 사이의 간선은 많아야 하나다.

그다음 줄에 승현이가 destroy 함수를 호출한 횟수 QQ가 주어진다. 이어지는 QQ개 줄에는 호출마다 인자 ll과 rr이 공백을 사이에 두고 주어진다.

5≤V≤7005 \le V \le 700, 1≤E≤1234561 \le E \le 123456, 1≤Q≤500001 \le Q \le 50000, 1≤ui,vi≤V1 \le u_i, v_i \le V, ui≠viu_i \ne v_i, 1≤l≤r≤E1 \le l \le r \le E

출력

destroy 호출마다 ll번부터 rr번까지의 간선이 파괴된 그래프의 컴포넌트 수를 한 줄에 하나씩, 입력에 주어진 순서대로 출력한다.

승현이는 자비로워서 여러분이 그래프를 복구한 뒤에야 다음 destroy를 호출한다. 따라서 각 질의는 언제나 원래 그래프에서 ll번부터 rr번까지의 간선만 지운 그래프를 대상으로 한다.

힌트

첫 번째 예제의 그래프는 [그림 3]의 그래프와 같다.

예제7

  1. 예제 1

    입력
    5 6
    1 3
    2 5
    1 4
    2 3
    1 5
    5 4
    2
    3 5
    1 6
    
    예상 출력
    2
    5
    
  2. 예제 2

    입력
    5 1
    2 4
    1
    1 1
    
    예상 출력
    5
    
  3. 예제 3

    입력
    5 10
    1 2
    1 3
    1 4
    1 5
    2 3
    2 4
    2 5
    3 4
    3 5
    4 5
    8
    1 10
    1 1
    5 7
    10 10
    2 9
    3 8
    1 9
    2 10
    
    예상 출력
    5
    1
    1
    1
    3
    1
    4
    4
    
  4. 예제 4

    입력
    10 9
    1 2
    2 3
    3 4
    4 5
    5 6
    6 7
    7 8
    8 9
    9 10
    8
    1 9
    5 5
    1 4
    6 9
    3 7
    2 2
    9 9
    4 6
    
    예상 출력
    10
    2
    5
    5
    6
    2
    2
    4
    
  5. 예제 5

    입력
    8 7
    1 2
    1 3
    1 4
    1 5
    1 6
    1 7
    1 8
    6
    1 7
    1 3
    4 7
    2 5
    7 7
    1 1
    
    예상 출력
    8
    4
    5
    5
    2
    2
    
  6. 예제 6

    입력
    7 10
    1 2
    3 4
    5 6
    2 3
    6 7
    4 5
    1 7
    2 6
    3 7
    1 4
    10
    1 10
    2 9
    4 6
    1 5
    6 10
    5 5
    3 3
    7 8
    1 2
    9 10
    
    예상 출력
    7
    5
    1
    2
    2
    1
    1
    1
    1
    1
    
  7. 예제 7

    입력
    10 20
    1 2
    1 3
    1 4
    1 5
    2 3
    2 4
    2 5
    3 4
    3 5
    4 5
    6 7
    6 8
    6 9
    6 10
    7 8
    7 9
    7 10
    8 9
    8 10
    9 10
    7
    1 20
    1 10
    11 20
    5 15
    1 1
    20 20
    8 12
    
    예상 출력
    10
    6
    6
    3
    2
    2
    2