만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

Link Cut Digraph

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

요약
방향 그래프에 간선이 하나씩 추가될 때마다 서로 도달 가능한 정점 쌍의 개수를 구합니다. 정점은 최대 10만 개, 간선은 최대 25만 개입니다.
난이도

어려움10점 중 10점

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

문제

정점이 nn개인 그래프가 있으며, 처음에는 간선이 없다. 연산은 mm번 수행한다. 각 연산에서는 주어진 방향 간선을 그래프에 추가한 뒤, uu에서 vv로 도달할 수 있고 vv에서 uu로 도달할 수 있는 쌍 (u,v)(u, v) (1≤u<v≤n1 \leq u < v \leq n)의 개수를 출력한다.

ICPC 대회에서 논문에 나온 알고리즘을 구현할 수 있는가?

입력

첫 줄에 두 정수 nn, mm (1≤n≤1051 \leq n \leq 10^5, 1≤m≤2.5⋅1051 \leq m \leq 2.5 \cdot 10^5)이 주어진다. 이후 mm개의 줄에는 새로 추가되는 방향 간선을 나타내는 두 정수 uu, vv (1≤u,v≤n1 \leq u, v \leq n)가 한 줄에 하나씩 주어진다. 병렬 간선과 자기 루프가 허용된다.

출력

mm개의 정수를 한 줄에 하나씩 출력한다. 각 정수는 해당 간선을 추가한 뒤의 쌍의 개수이다.

예제1

  1. 예제 1

    입력
    4 6
    1 2
    2 3
    2 1
    3 4
    4 3
    3 2
    
    예상 출력
    0
    0
    1
    1
    2
    6