結果

問題 No.3283 Labyrinth and Friends
ユーザー tobisatis
提出日時 2025-09-26 22:48:18
言語 C#
(.NET 8.0.404)
結果
AC  
実行時間 233 ms / 2,000 ms
コード長 1,233 bytes
コンパイル時間 9,185 ms
コンパイル使用メモリ 169,584 KB
実行使用メモリ 188,380 KB
最終ジャッジ日時 2025-09-26 22:48:33
合計ジャッジ時間 14,531 ms
ジャッジサーバーID
(参考情報)
judge2 / judge1
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 2
other AC * 45
権限があれば一括ダウンロードができます
コンパイルメッセージ
  復元対象のプロジェクトを決定しています...
  /home/judge/data/code/main.csproj を復元しました (120 ミリ秒)。
  main -> /home/judge/data/code/bin/Release/net8.0/main.dll
  main -> /home/judge/data/code/bin/Release/net8.0/publish/

ソースコード

diff #

#nullable enable

#region
var _input = Array.Empty<string>();
var _iter = 0;
string String()
{
    while (_iter >= _input.Length) (_input, _iter) = (Console.ReadLine()!.Trim().Split(' '), 0);
    return _input[_iter++];
}
T I<T>() where T : IParsable<T> => T.Parse(String(), null);
#endregion

static T[] Range<T>(int n, Func<T> F) => Enumerable.Range(0, n).Select(_ => F()).ToArray();

var n = I<int>();
var x = I<int>();
var g = Range(n, () => new List<int>());
for (var i = 1; i < n; i++)
{
    var p = I<int>() - 1;
    g[p].Add(i);
}
var cz = new int[n];
var sz = new int[n];
for (var i = 1; i < n; i++)
{
    cz[i] = I<int>();
    sz[i] = I<int>();
}

Dictionary<int, long> S(int v)
{
    var s = sz[v];
    var c = cz[v];
    var d = new Dictionary<int, long>(){ [s] = c };
    foreach (var u in g[v])
    {
        var next = S(u);
        var nd = new Dictionary<int, long>();
        foreach (var (ik, iv) in d) foreach (var (jk, jv) in next)
        {
            var nc = iv + jv;
            var k = Math.Min(ik + jk, x);
            if (nd.TryGetValue(k, out var cv) && cv <= nc) continue;
            nd[k] = nc;
        }
        d = nd;
    }
    d[0] = 0;
    return d;
}
var ans = S(0);
Console.WriteLine(ans[x]);
0