만드는 중입니다

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

Abstract

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

요약
매초 각 노드의 값이 간선을 따라 나가는 이웃 노드로 전달되고, 유일한 싱크 노드는 자신의 값의 절반을 받습니다. 모든 값이 0이 되는 첫 시점을 998244353으로 나눈 나머지로 구합니다.
난이도

어려움10점 중 8점

유형
그래프, 위상 정렬, 동적 계획법, 수학
정답자
아직 제출이 없습니다

Abstract

Time limit: 2000 ms. Memory limit: 2048 MB.

문제

정점이 nn개, 간선이 mm개인 DAG(방향 비순환 그래프)가 주어진다. 나가는 간선이 없는 정점 xx가 정확히 하나 있다. ii번 정점에는 정수 aia_i가 적혀 있다.

매초 다음 과정이 일어난다.

  • 각 정점 ii에 대해 bi=aib_i = a_i로 둔다.
  • 각 정점 ii에 대해 ai=0a_i = 0으로 둔다.
  • 각 정점 ii와 ii에서 jj로 가는 간선이 있는 각 정점 jj에 대해, bib_i를 aja_j에 더한다.
  • ⌊bx/2⌋\lfloor b_x / 2 \rfloor를 axa_x에 더한다.

모든 aia_i가 처음으로 0이 되는 시각을 구한다. 답이 매우 클 수 있으므로 998 244 353998\,244\,353으로 나눈 나머지를 구한다.

입력

첫째 줄에 정점 수 nn과 간선 수 mm이 주어진다 (1≤n≤1041 \le n \le 10^4; 1≤m≤1051 \le m \le 10^5).

둘째 줄에 nn개의 정수 a1,a2,…,ana_1, a_2, \ldots, a_n (0≤ai≤1090 \le a_i \le 10^9)이 주어진다.

이어지는 mm개의 줄에는 각각 uu에서 vv로 가는 간선을 나타내는 두 정수 uu, vv (1≤u,v≤n1 \le u, v \le n)가 주어진다.

그래프는 다중 간선이 없는 DAG이며, 나가는 간선이 없는 정점은 정확히 하나라고 보장된다.

출력

모든 aia_i가 처음으로 0이 되는 시각을 998 244 353998\,244\,353으로 나눈 나머지로 한 줄에 출력한다.

힌트

이 문제는 Codeforces 1704E와 공교롭게도 매우 비슷하다.

예제3

  1. 예제 1

    입력
    3 2
    1 1 1
    1 2
    2 3
    
    예상 출력
    3
    
  2. 예제 2

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

    입력
    5 6
    7 2 3 6 6
    1 2
    1 4
    2 3
    3 4
    3 5
    4 5
    
    예상 출력
    9