verify/tree/diameter_path_static_test_.nim

This documentation is automatically generated by online-judge-tools/verification-helper

:warning: verify/tree/diameter_path_static_test_.nim

Depends on

Code

# verification-helper: PROBLEM https://atcoder.jp/contests/abc221/tasks/abc221_f
import sequtils, math
import cplib/graph/graph
import cplib/tree/diameter
import cplib/modint/modint
proc scanf(formatstr: cstring){.header: "<stdio.h>", varargs.}
proc ii(): int {.inline.} = scanf("%lld\n", addr result)
type mint = modint998244353_montgomery

var n = ii()
var g = initUnWeightedUnDirectedStaticGraph(n)
for i in 0..<n-1:
    var u, v = ii() - 1
    g.add_edge(u, v)
g.build

var (d, path) = g.diameter_path
if d mod 2 == 0:
    var center = path[d div 2]
    var cnt = 0
    proc find_leaf(x, par, di: int) =
        if di == d div 2 - 1: cnt += 1
        for y in g[x]:
            if y == par: continue
            find_leaf(y, x, di+1)
    var t = newSeq[mint]()
    for x in g[center]:
        cnt = 0
        find_leaf(x, center, 0)
        t.add(mint(cnt + 1))
    echo (t.foldl(a * b) - t.sum + t.len - 1)
else:
    var c1 = path[d div 2]
    var c2 = path[(d+1) div 2]
    proc find_leaf(x, par, di: int): int =
        if di == d div 2: result += 1
        for y in g[x]:
            if y == par: continue
            result += find_leaf(y, x, di+1)
    var ch1 = find_leaf(c1, c2, 0)
    var ch2 = find_leaf(c2, c1, 0)
    echo (mint(ch1) * mint(ch2))
Traceback (most recent call last):
  File "/home/runner/.local/lib/python3.12/site-packages/onlinejudge_verify/documentation/build.py", line 71, in _render_source_code_stat
    bundled_code = language.bundle(stat.path, basedir=basedir, options={'include_paths': [basedir]}).decode()
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/runner/.local/lib/python3.12/site-packages/onlinejudge_verify/languages/nim.py", line 86, in bundle
    raise NotImplementedError
NotImplementedError
Back to top page