1 条题解

  • 0
    @ 2025-6-7 11:51:18
    #include <bits/stdc++.h>
    #define int long long
    using namespace std;
    int n;
    int l[41234], r[41234];
    int a[41234], b[41234], c[41234];
    int f[41234][55][55];
    //到了 u,删了 x 条左、y 条 右
    int dfs(int u, int x, int y)
    {
        if (u >= n)
            return c[u] * (a[u] + x) * (b[u] + y);
        if (f[u][x][y] != 0)
            return f[u][x][y];
        f[u][x][y] = min(dfs(l[u], x, y) + dfs(r[u], x, y + 1),
                         dfs(r[u], x, y) + dfs(l[u], x + 1, y));
        return f[u][x][y];
    }
    signed main()
    {
        ios::sync_with_stdio(false);
        cin.tie(0);
        cin >> n;
        for (int i = 1; i <= n - 1; i++)
        {
            cin >> l[i] >> r[i];
            if (l[i] <= 0)
                l[i] = n - 1 - l[i];
            if (r[i] <= 0)
                r[i] = n - 1 - r[i];
        }
        for (int i = 1; i <= n; i++)
            cin >> a[n - 1 + i] >> b[n - 1 + i] >> c[n - 1 + i];
        cout << dfs(1, 0, 0) << endl;
        return 0;
    }
    
    • 1

    信息

    ID
    5139
    时间
    1000ms
    内存
    500MiB
    难度
    4
    标签
    递交数
    16
    已通过
    7
    上传者