結果
| 問題 |
No.1878 union-find の数え上げ
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2022-04-18 15:23:27 |
| 言語 | Scala(Beta) (3.6.2) |
| 結果 |
AC
|
| 実行時間 | 1,516 ms / 2,000 ms |
| コード長 | 844 bytes |
| コンパイル時間 | 14,120 ms |
| コンパイル使用メモリ | 269,684 KB |
| 実行使用メモリ | 87,528 KB |
| 最終ジャッジ日時 | 2024-12-29 09:50:47 |
| 合計ジャッジ時間 | 35,299 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 |
| other | AC * 13 |
ソースコード
import java.io.PrintWriter
import scala.collection.mutable.*
import scala.io.StdIn.*
import scala.util.chaining.*
import scala.math.*
import scala.reflect.ClassTag
import scala.util.*
import scala.annotation.tailrec
import scala.collection.mutable
import scala.language.strictEquality
@main def main =
inline val MOD = 998244353
val n = readLine.toInt
val parent = Array.fill(n - 1){readLine.toInt - 1}
val children = Array.fill(n){ArrayBuffer[Int]()}
for (p, i) <- parent.zipWithIndex do
children(p).addOne(i + 1)
val depth = Array.fill(n){0}
val queue = mutable.ArrayDeque[Int](0)
while queue.nonEmpty do
val top = queue.removeHead()
for child <- children(top) do
depth(child) = depth(top) + 1
queue.append(child)
val result = depth.foldLeft(1L){(acc, v) => acc * max(v, 1) % MOD}
println(result)