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

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

DFS

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

요약
뿌리가 있는 트리에서 정점 값을 이용해 y가 x의 부분트리에 있는 모든 쌍 (x, y)에 대해, 무작위 DFS 스택에 들어간 값의 최솟값 기댓값을 모두 더한 합을 998244353으로 나눈 나머지로 구합니다.
난이도

어려움10점 중 9점

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

문제

루트가 있는 트리가 정점 nn개로 주어지며, rr은 트리의 루트이다. 각 정점 xx의 값은 axa_x이다.

정점 xx에서 시작해 yy를 찾는 DFS 과정을 다음과 같이 정의한다.

  1. xx를 스택에 넣는다.
  2. 스택의 맨 위 원소 ww를 확인한다. w=yw = y이면 과정이 끝난다. 그렇지 않고 ww의 방문하지 않은 자식이 하나 이상 있으면, 그중 하나를 같은 확률로 골라 스택에 넣는다.
  3. 방문하지 않은 자식이 없을 때까지 2단계를 반복한다.
  4. 스택의 맨 위 원소를 꺼낸다.
  5. 스택이 빌 때까지 2단계를 반복한다.

이 과정은 yy가 xx의 서브트리에 속할 때에만 합법이다.

f(x,y)f(x,y)는 xx에서 시작해 yy를 찾는 DFS 과정 동안 스택에 한 번이라도 들어간 모든 정점 값의 최솟값의 기댓값이다.

이제 모든 합법적인 쌍 (x,y)(x,y)에 대해 ∑f(x,y)\sum f(x,y)를 구한다. 답은 기약분수 xy\frac{x}{y}로 나타낼 수 있으며, xx와 yy는 정수이고 y≢0(mod998 244 353)y\not\equiv 0\pmod{998\,244\,353}이다. x⋅y−1(mod998 244 353)x\cdot y^{-1}\pmod{998\,244\,353}의 값을 출력한다. 즉, 0≤a<998 244 3530\leq a<998\,244\,353이고 a⋅y≡x(mod998 244 353)a\cdot y\equiv x\pmod{998\,244\,353}을 만족하는 정수 aa를 출력한다.

입력

첫 줄에 테스트 케이스 수 TT (1≤T≤1001 \leq T \leq 100)가 주어진다.

각 테스트 케이스의 첫 줄에는 정점 수 nn과 루트 rr (1≤n≤4⋅1051 \leq n \leq 4 \cdot 10^5, 1≤r≤n1 \leq r \leq n)이 주어진다.

다음 줄에는 nn개의 정수가 주어지며, ii번째 정수는 정점 ii의 값 aia_i (1≤ai≤1091\leq a_i\leq 10^9)이다.

이어서 n−1n-1개의 줄에 간선을 나타내는 정수 uu, vv (1≤u,v≤n1 \leq u,v \leq n)가 주어진다.

∑n≤8⋅105\sum n \leq 8 \cdot 10^5이며, 주어진 그래프는 트리이다.

출력

각 테스트 케이스의 답을 한 줄에 하나씩 출력한다.

예제1

  1. 예제 1

    입력
    4
    1 1
    1
    3 3
    3 3 4
    3 1
    3 2
    6 1
    5 2 4 1 3 6
    1 2
    1 6
    2 3
    2 4
    4 5
    5 1
    5 4 3 2 1
    1 2
    1 3
    3 4
    3 5
    
    예상 출력
    1
    16
    34
    499122202