Submission #1284623

#TimeUsernameProblemLanguageResultExecution timeMemory
1284623hrantsargsyanStrah (COCI18_strah)C++20
0 / 110
1 ms404 KiB
#include <iostream>
#include <vector>
using namespace std;

const int N = 1005;
vector<int> g[N];
int dp[N][N][2];
int a[N], n, m;

void dfs(int node, int parent)
{
    for (int i = 0;i <= m;++i)
    {
        dp[node][i][1] = a[node];
        dp[node][i][0] = a[node];
    }
    dp[node][0][0] = 0;
    dp[node][0][1] = 0;
    for (auto child : g[node])
    {
        if (child == parent)
        {
            continue;
        }
        dfs(child, node);
        for (int time = m;time >=2;--time)
        {
            for (int timeChild = time-1;timeChild >= 0;--timeChild)
            {
                if (time - timeChild >= 2)
                {
                    dp[node][time][0] = max(dp[node][time][0], dp[node][time - timeChild - 2][0] + dp[child][timeChild][1]);
                }                
                dp[node][time][0] = max(dp[node][time][0], dp[node][time - timeChild - 1][1] + dp[child][timeChild][0]);
            }
            for (int timeChild = time - 2;timeChild >= 0;--timeChild)
            {
                dp[node][time][1] = max(dp[node][time][1], dp[node][time - timeChild - 2][1]+dp[child][timeChild][1]);
            }
        }
    }
}

int main()
{
    cin >> n >> m;
    for (int i = 1;i <= n;++i)
    {
        cin >> a[i];
    }
    for (int i = 1;i < n;++i)
    {
        int x, y;
        cin >> x >> y;
        g[x].push_back(y);
        g[y].push_back(x);
    }
    dfs(1, 0);
    //for (int i = 1;i <= n;++i)
    //{
    //    for (int j = 0;j <= m;++j)
    //    {
    //        cout << "From " << i << " using " << j << " time." << endl;
    //        cout << dp[i][j][1] << " " << dp[i][j][0] << endl;
    //    }
    //}
    cout << max(dp[1][m][0], dp[1][m][1]);
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...