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

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

종속 사건

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

요약
각 사건이 부모 사건의 발생 여부에 따라 조건부 확률을 갖는 루트 트리에서, 두 사건이 모두 발생할 확률을 1e9+7로 나눈 값으로 구하는 문제입니다.
난이도

보통10점 중 7점

유형
트리, 확률, 수학, DFS
정답자
아직 제출이 없습니다

문제

NN개의 사건이 있고, 각각 11번부터 NN번까지 번호가 붙어 있다. 각 사건이 일어날 확률은 정확히 하나의 다른 사건, 즉 부모 사건의 발생 여부에 따라 달라진다. 단, 사건 11은 독립 사건이다. 다시 말해 22번부터 NN번까지의 각 사건 ii에 대해 세 값이 주어진다. PiP_i는 사건 ii의 부모 사건, AiA_i는 부모 사건이 일어났을 때 사건 ii가 일어날 확률, BiB_i는 부모 사건이 일어나지 않았을 때 사건 ii가 일어날 확률이다. 사건 11에 대해서는 발생 확률 KK가 주어진다. 답해야 하는 쿼리가 QQ개 있다. 각 쿼리는 서로 다른 두 사건 uju_j와 vjv_j로 이루어지며, 두 사건 uju_j와 vjv_j가 모두 일어났을 확률을 구해야 한다.

입력

입력의 첫 줄에는 테스트 케이스의 수 TT가 주어진다. 이어서 TT개의 테스트 케이스가 따른다.

각 테스트 케이스의 첫 줄에는 사건의 수 NN과 쿼리의 수 QQ가 주어진다. 이어서 NN개의 줄이 주어지며, ii번째 줄은 사건 ii를 나타낸다. 첫 줄에는 사건 11의 발생 확률에 10610^6을 곱한 정수 KK가 하나 주어진다. 그다음 N−1N-1개의 줄에는 각각 세 정수 PiP_i, AiA_i, BiB_i가 주어진다. PiP_i는 사건 ii의 부모 사건, AiA_i는 부모 사건이 일어났을 때 사건 ii가 일어날 확률에 10610^6을 곱한 값, BiB_i는 부모 사건이 일어나지 않았을 때 사건 ii가 일어날 확률에 10610^6을 곱한 값이다. 그다음 QQ개의 줄에는 쿼리가 주어진다. 각 줄에는 서로 다른 두 정수 uju_j와 vjv_j가 있다. 각 쿼리에 대해 사건 uju_j와 vjv_j가 모두 일어났을 확률을 구한다.

출력

각 테스트 케이스마다 Case #x: R1 R2 R3 … RQ 형식의 한 줄을 출력한다. 여기서 xx는 테스트 케이스 번호(1부터 시작)이고, RjR_j는 jj번째 쿼리에 대해 구한 확률을 109+710^9+7로 나눈 나머지이다. 이 값은 다음과 같이 정의된다. jj번째 쿼리의 답을 기약분수 pq\frac{p}{q}로 나타내자. 그러면 RjR_j는 합동식 Rj×q≡p(mod109+7)R_j × q ≡ p \pmod{10^9+7}을 만족하고 00 이상 109+610^9+6 이하인 값이다. 이 문제의 제약 조건에서 이러한 RjR_j는 항상 존재하고 유일하게 정해진다.

제한

  • 1≤T≤1001 ≤ T ≤ 100.
  • 1≤Pi1 ≤ P_i.
  • 모든 jj에 대해 1≤uj,vj≤N1 ≤ u_j, v_j ≤ N이고 uj≠vju_j ≠ v_j.
  • 22번부터 NN번까지의 각 ii에 대해 0≤Ai≤1060 ≤ A_i ≤ 10^6.
  • 22번부터 NN번까지의 각 ii에 대해 0≤Bi≤1060 ≤ B_i ≤ 10^6.
  • 0≤K≤1060 ≤ K ≤ 10^6.

예제1

  1. 예제 1

    입력
    2
    5 2
    200000
    1 400000 300000
    2 500000 200000
    1 800000 100000
    4 200000 400000
    1 5
    3 5
    4 2
    300000
    1 100000 100000
    2 300000 400000
    3 500000 600000
    1 2
    2 4
    
    예상 출력
    Case #1: 136000001 556640004
    Case #2: 710000005 849000006