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

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

트리와 깃발

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

요약
트리의 각 간선을 제거했을 때 두 정점에서 같은 종류의 깃발을 골라 다시 하나의 트리로 만드는 경우의 수를 간선마다 구한다.
난이도

보통10점 중 7점

유형
트리, 유니온 파인드, 조합론, DFS
정답자
아직 제출이 없습니다

문제

머슥은 NN개의 정점이 있는 트리와 MM종류의 깃발들을 가지고 있다. 깃발의 종류는 11부터 MM까지의 정수로 표현된다. 각 정점은 00개 이상 MM개 이하의 서로 다른 깃발을 가질 수 있다.

주어진 트리에서 두 개의 서로 다른 정점을 선택하고, 각 정점에서 깃발을 하나씩 선택할 때, 두 깃발이 같은 종류라면 두 정점을 잇는 간선을 추가할 수 있다.

주어진 트리에서 각 간선을 제거했을 때, 위 조건에 따라 깃발을 선택하여 간선을 추가하면 다시 하나의 트리가 되도록 깃발을 고르는 경우의 수를 구하여라.

입력

첫째 줄에 N, MN,\ M이 공백을 사이에 두고 주어진다. (2≤N≤500 000;(2 \le N \le 500\ 000; 1≤M≤500 000)1 \le M \le 500\ 000)

둘째 줄부터 N−1N-1개의 줄에 걸쳐 트리의 간선들이 주어진다. ii번째 줄에는 두 개의 정수 A_iA\_i, B_iB\_i가 공백을 사이에 두고 주어진다. 이는 ii번 간선이 A_iA\_i번 정점과 B_iB\_i번 정점을 연결함을 의미한다. (1≤A_i, B_i≤N;(1 \le A\_i,\ B\_i \le N; 1≤i<N;1 \le i \lt N; A_i≠B_i)A\_i \ne B\_i)

이어서 MM개의 줄에 걸쳐 jj번째 줄에는 C_jC\_j 와 종류가 jj인 깃발을 가지고 있는 C_jC\_j개의 서로 다른 정점들이 공백을 사이에 두고 주어진다. (0≤C_j≤500 000(0 \le C\_j \le 500\ 000; 1≤j≤M;1 \le j \le M; ∑_j=1MC_j≤500 000)\sum\_{j=1}^{M}C\_j \le 500\ 000)

출력

N−1N-1개의 줄에 걸처 ii번째 줄에 트리의 ii번 간선을 제거했을 때, 다시 하나의 트리가 되도록 깃발을 고르는 경우의 수를 구하여라.

예제2

  1. 예제 1

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

    입력
    2 1
    1 2
    2 1 2
    
    예상 출력
    1