만드는 중입니다

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

연결성 동치

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

요약
간선을 하나 추가하거나 삭제한 그래프가 이어지는 k개 버전을, 연결 성분 구성이 같은 것끼리 묶어 출력합니다.
난이도

어려움10점 중 9점

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

문제

크기가 nn인 두 무방향 그래프가 연결성에서 동치라는 것은 모든 1≤u<v≤n1\le u<v\le n에 대하여 한 그래프에서 uu와 vv 사이에 경로가 존재할 때, 그리고 그때에만 다른 그래프에서도 uu와 vv 사이에 경로가 존재한다는 뜻이다.

kk개의 그래프 G1,G2,…,GkG_1, G_2, \ldots, G_k가 주어진다. 각 그래프의 크기는 nn이다. 이 수열에서 각 i=2,3,…,ki=2,3,\ldots,k에 대하여 GiG_i가 GpiG_{p_i}에서 간선 하나를 추가하거나 제거하여 얻어지는 pi<ip_i<i가 존재한다. 주어진 그래프를 그룹으로 나누어, 두 그래프가 연결성에서 동치일 때, 그리고 그때에만 같은 그룹에 속하게 하라.

입력

여러 테스트 케이스가 주어진다. 입력의 첫 줄에는 테스트 케이스의 수 TT가 주어진다 (1≤T≤1051\le T\le 10^5). 각 테스트 케이스는 다음과 같다.

첫 줄에는 세 정수 kk, nn, mm이 주어진다 (1≤k,n≤1051 \le k, n \le 10^5, 0≤m≤min⁡(105,n(n−1)2)0 \le m \le \min(10^5, \frac{n(n-1)}{2})). kk는 그래프의 수, nn은 각 그래프의 정점 수, mm은 G1G_1의 간선 수이다.

다음 mm개 줄 각각에는 두 정수 uu, vv가 주어진다 (1≤u<v≤n1\le u<v\le n). 이는 G1G_1에서 uu와 vv를 잇는 간선을 뜻한다. G1G_1에는 중복 간선이 없음이 보장된다.

다음 k−1k-1개 줄 중 ii번째 줄에는 정수 pi+1p_{i+1}, 문자열 ti+1t_{i+1}, 두 정수 xi+1x_{i+1}, yi+1y_{i+1}이 주어진다 (1≤pi+1≤i1\le p_{i+1}\le i, 1≤xi+1<yi+1≤n1\le x_{i+1}<y_{i+1}\le n). ti+1t_{i+1}은 add 또는 remove이다.

ti+1t_{i+1}이 add이면 Gi+1G_{i+1}은 Gpi+1G_{p_{i+1}}에 xi+1x_{i+1}과 yi+1y_{i+1}을 잇는 간선을 추가하여 얻어진다. 이 간선은 Gpi+1G_{p_{i+1}}에 존재하지 않음이 보장된다.

ti+1t_{i+1}이 remove이면 Gi+1G_{i+1}은 Gpi+1G_{p_{i+1}}에서 xi+1x_{i+1}과 yi+1y_{i+1}을 잇는 간선을 제거하여 얻어진다. 이 간선은 Gpi+1G_{p_{i+1}}에 존재함이 보장된다.

모든 테스트 케이스에서 nn의 합, mm의 합, kk의 합은 각각 10510^5을 넘지 않는다.

출력

각 테스트 케이스마다 다음을 출력한다.

첫 줄에 그룹의 수 rr을 출력한다.

각 그룹마다 한 줄에 그룹의 크기와 그룹에 속한 그래프의 번호를 출력한다. 즉, 그룹의 크기를 나타내는 정수 ss와 이어서 ss개의 정수를 공백으로 구분해 출력한다. 그룹의 순서와 각 그룹 안에서 그래프의 순서는 임의로 정해도 된다.

예제1

  1. 예제 1

    입력
    2
    15 11 8
    6 11
    1 6
    6 9
    6 8
    1 2
    1 5
    9 10
    2 5
    1 add 3 11
    1 add 2 3
    3 add 5 8
    4 add 5 11
    3 add 7 10
    1 add 6 10
    3 add 3 10
    1 remove 6 8
    5 add 4 9
    1 add 2 9
    8 add 7 8
    3 add 2 4
    1 remove 6 9
    10 remove 6 9
    14 5 2
    1 5
    1 4
    1 add 2 4
    1 add 3 4
    1 add 2 4
    4 add 3 4
    4 add 1 3
    5 add 1 3
    2 add 2 3
    1 add 1 2
    4 add 3 4
    3 add 4 5
    9 add 2 3
    3 remove 1 5
    3 remove 3 4
    
    예상 출력
    7
    2 10 13
    5 2 3 4 5 8
    3 1 7 11
    1 14
    2 6 12
    1 9
    1 15
    5
    3 2 4 9
    6 5 6 7 8 10 12
    2 1 14
    2 3 11
    1 13