結果
| 問題 |
No.2494 Sum within Components
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2023-10-06 22:00:48 |
| 言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
| 結果 |
AC
|
| 実行時間 | 1,022 ms / 2,000 ms |
| コード長 | 938 bytes |
| コンパイル時間 | 203 ms |
| コンパイル使用メモリ | 12,800 KB |
| 実行使用メモリ | 49,360 KB |
| 最終ジャッジ日時 | 2024-07-26 16:06:40 |
| 合計ジャッジ時間 | 5,902 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 17 |
ソースコード
from collections import defaultdict
def solve(n, m, a, uv):
mod = 998244353
uf = [-1] * n
sm = a[:]
for ui, vi in uv:
ru = root(uf, ui)
rv = root(uf, vi)
if ru == rv: continue
su = sm[ru]
sv = sm[rv]
r = merge(uf, ui, vi)
sm[r] = su + sv
ans = 1
for i in range(n):
si = sm[root(uf, i)]
ans *= si
ans %= mod
return ans
def root(uf, n):
route = []
i = n
while uf[i] >= 0:
route.append(i)
i = uf[i]
for r in route:
uf[r] = i
return i
def merge(uf, n, m):
rootn = root(uf, n)
rootm = root(uf, m)
sizen = -uf[rootn]
sizem = -uf[rootm]
if rootn == rootm:
return
elif sizen < sizem:
rootn, rootm = rootm, rootn
uf[rootn] = -(sizen + sizem)
uf[rootm] = rootn
return rootn
n, m = [int(x) for x in input().split()]
a = [int(x) for x in input().split()]
uv = [[int(x) - 1 for x in input().split()] for _ in range(m)]
print(solve(n, m, a, uv))