# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
163095 | arnold518 | Chase (CEOI17_chase) | C++14 | 288 ms | 99248 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
const int MAXN = 1e5;
const int MAXK = 100;
int N, K;
ll P[MAXN+10], S[MAXN+10], dp[MAXN+10][MAXK+10];
vector<int> adj[MAXN+10];
void dfs(int now, int bef)
{
int i, j, chd=0;
for(int nxt : adj[now])
{
if(nxt==bef) continue;
dfs(nxt, now);
S[now]+=P[nxt];
chd++;
}
dp[now][0]=0;
for(i=1; i<=K; i++)
{
ll val=0;
for(int nxt : adj[now])
{
if(nxt==bef) continue;
val=max(val, dp[nxt][i-1]);
dp[now][i]=max(dp[now][i], dp[nxt][i]);
}
dp[now][i]=max(dp[now][i], S[now]+val);
}
//printf("%d : ", now);
//for(i=0; i<=K; i++) printf("%lld ", dp[now][i]);
//printf("\n");
}
int main()
{
int i, j;
scanf("%d%d", &N, &K);
for(i=1; i<=N; i++) scanf("%lld", &P[i]);
for(i=1; i<N; i++)
{
int u, v;
scanf("%d%d", &u, &v);
adj[u].push_back(v);
adj[v].push_back(u);
}
dfs(1, 1);
printf("%lld", dp[1][K]);
}
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |