結果
問題 | No.763 Noelちゃんと木遊び |
ユーザー |
![]() |
提出日時 | 2021-08-07 00:21:32 |
言語 | Nim (2.2.0) |
結果 |
CE
(最新)
AC
(最初)
|
実行時間 | - |
コード長 | 2,349 bytes |
コンパイル時間 | 1,913 ms |
コンパイル使用メモリ | 90,224 KB |
最終ジャッジ日時 | 2024-11-15 01:33:49 |
合計ジャッジ時間 | 2,946 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge1 |
(要ログイン)
コンパイルエラー時のメッセージ・ソースコードは、提出者また管理者しか表示できないようにしております。(リジャッジ後のコンパイルエラーは公開されます)
ただし、clay言語の場合は開発者のデバッグのため、公開されます。
ただし、clay言語の場合は開発者のデバッグのため、公開されます。
コンパイルメッセージ
/home/judge/data/code/Main.nim(20, 6) Error: 'nibutan' can have side effects > /home/judge/data/code/Main.nim(21, 65) Hint: 'nibutan' calls routine via hidden pointer indirection
ソースコード
import sequtils, strutils, strformat, algorithm, math, sugar, hashes, tablesconst (INF*, AZ*) = (10^18+9, 26)import complex, random, deques, heapqueue, sets, macrosvar inFile = stdinlet inps* = iterator: string {.closure.} = (while true: (for s in inFile.readLine.split: yield s))let (inp*, inpf*) = (() => parseInt(inps()), () => parseFloat(inps()))func chmax*[T](t: var T; v: T): bool{.discardable.} = (let f = (t < v); if f: t = v; f)func chmin*[T](t: var T; v: T): bool{.discardable.} = (let f = (t > v); if f: t = v; f)func inRange*[T](L, v, r: T): bool = (L < r) and ((L <= v) and (v < r))func inRange*(x, y, w, h: int): bool = inRange(0, y, h) and inRange(0, x, w)func sqrt*(v: int): int = toInt(trunc(sqrt(toFloat(v))))template if3*(cond: bool; t, f: untyped): auto = (if cond: t else: f)func divCeil*(a, b: int): int = (a+b-1) div btemplate echoQuit*(ans: typed) = (echo(ans); quit(0))template newSeqWith*(y, x: int; p: untyped): untyped = newSeqWith(y, newSeqWith(x, p))func hash*(x: int): Hash = x*7func char2int*(c, def: char): int = ord(c)-ord(def)func inc*[T](ct: var Table[T, int]; k: T; v = 1) = (ct[k] = ct.getOrDefault(k) + v)func dec*[T](ct: var Table[T, int]; k: T; v = 1) = (if ct.hasKey(k): (if ct[k] <= v: ct.del(k) else: ct[k] -= v))func nibutan*(ok, ng: int; isOK: (int)->bool): int = (var (ok, ng) = (ok, ng);(while (abs(ok - ng) > 1): (let mid = (ng + ok) div 2; if isOk(mid): ok = mid else: ng = mid)); return ok)proc echo*(f: float) = echo(fmt"{f:.20f}")func cmod*[T](n, md: T): T = (n mod md + md) mod mdtemplate addEdges*(g: seq[seq]; n: int; frm, to: untyped) = (for i in 0..n: g[frm].add(to))when defined(debug): #デバッグ時だけ使える命令などtemplate eprintf*(x: typed) = echo("[debug] --- ", x)else:template eprintf*(x: typed) = discardmacro dump*(x: typed): untyped = discard{.warning[UnusedImport]: off.} #----- ここまでテンプレ -----let N = inp()var G = newSeqWith(N, 0, 0)for i in 0..<N-1:let u, v = inp()-1G[u].add(v)G[v].add(u)var dp = newSeqWith(N, (0, 0))proc dfs(cur, owner: int) =var r0 = 0var r1 = 1for nxt in G[cur]:if nxt == owner: continuedfs(nxt, cur)r0 += max(dp[nxt][0], dp[nxt][1])r1 += max(dp[nxt][1]-1, dp[nxt][0])dp[cur] = (r0, r1)dfs(0, -1)dump(dp)echo(max(dp[0][0], dp[0][1]))