# |
Submission time |
Handle |
Problem |
Language |
Result |
Execution time |
Memory |
143305 |
2019-08-13T15:26:20 Z |
Milki |
Chase (CEOI17_chase) |
C++14 |
|
1469 ms |
336684 KB |
#include<bits/stdc++.h>
using namespace std;
#define FOR(i, a, b) for(int i = a; i < b; ++i)
#define REP(i, n) FOR(i, 0, n)
#define _ << " " <<
#define sz(x) ((int) x.size())
#define pb(x) push_back(x)
#define TRACE(x) cerr << #x << " = " << x << endl
#define int long long
typedef long long ll;
typedef pair<ll, ll> point;
const int MAXN = 1e5 + 5, MAXV = 105;
const ll inf = 1e16;
int n, k, val[MAXN];
vector <int> E[MAXN];
ll dp_down[MAXV][MAXN], sum[MAXN], sol, dp_up[MAXV][MAXN];
struct Best{
point a, b;
Best(){
a = point(0, MAXN - 1);
b = point(0, MAXN - 1);
}
void ubaci(point x){
if(x.first > a.first){
if(x.second != a.second)
b = a;
a = x;
}
else if(x.first > b.first){
if(x.second != a.second)
b = x;
}
}
void ubacic(point x){
if(x.first > a.first){
b = a;
a = x;
}
else if(x.first > b.first){
b = x;
}
}
};
void dfs(int x, int p = -1){
vector <Best> mx1, mx2;
mx1.resize(k + 1); mx2.resize(k + 1);
dp_up[1][x] = sum[x];
mx1[1].ubaci( {sum[x], -1} );
for(auto e : E[x]){
if(e == p) continue;
dfs(e, x);
FOR(i, 1, k + 1){
ll ans = dp_down[i - 1][e] + sum[e] - val[x];
ans = max(ans, dp_down[i][e]);
if(ans > dp_down[i][x]){
dp_down[i][x] = ans;
}
mx2[i].ubaci(point(ans, e));
dp_down[i][x] = max(dp_down[i][x], dp_down[i - 1][x]);
ans = dp_up[i - 1][e] + sum[x] - val[e];
ans = max(ans, dp_up[i][e]);
if(ans > dp_up[i][x]){
dp_up[i][x] = ans;
}
mx1[i].ubacic(point(ans, e));
dp_up[i][x] = max(dp_up[i][x], dp_up[i - 1][x]);
mx1[i].ubaci(mx1[i - 1].a);
mx1[i].ubaci(mx1[i - 1].b);
mx2[i].ubaci(mx2[i - 1].a);
mx2[i].ubaci(mx2[i - 1].b);
}
}
REP(i, k + 1){
//TRACE(mx1[i].a.first); TRACE(mx2[k - i].a.first);
if(mx1[i].a.second == mx2[k - i].a.second){
sol = max(sol, mx1[i].a.first + mx2[k - i].b.first);
sol = max(sol, mx1[i].b.first + mx2[k - i].a.first);
}
else{
sol = max(sol, mx1[i].a.first + mx2[k - i].a.first);
}
}
}
signed main(){
ios_base::sync_with_stdio(false); cin.tie(0);
cin >> n >> k;
REP(i, n)
cin >> val[i];
REP(i, n - 1){
int a, b; cin >> a >> b; a --; b --;
E[a].pb(b); E[b].pb(a);
}
if(k == 0){
cout << 0;
return 0;
}
REP(i, n){
for(auto e : E[i])
sum[i] += val[e];
sol = max(sol, sum[i]);
}
dfs(0);
cout << sol;
}
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
4 ms |
2808 KB |
Output is correct |
2 |
Correct |
5 ms |
2808 KB |
Output is correct |
3 |
Correct |
4 ms |
2680 KB |
Output is correct |
4 |
Correct |
4 ms |
2808 KB |
Output is correct |
5 |
Correct |
4 ms |
2680 KB |
Output is correct |
6 |
Correct |
35 ms |
2680 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
4 ms |
2808 KB |
Output is correct |
2 |
Correct |
5 ms |
2808 KB |
Output is correct |
3 |
Correct |
4 ms |
2680 KB |
Output is correct |
4 |
Correct |
4 ms |
2808 KB |
Output is correct |
5 |
Correct |
4 ms |
2680 KB |
Output is correct |
6 |
Correct |
35 ms |
2680 KB |
Output is correct |
7 |
Correct |
14 ms |
7160 KB |
Output is correct |
8 |
Correct |
7 ms |
3064 KB |
Output is correct |
9 |
Correct |
5 ms |
2808 KB |
Output is correct |
10 |
Correct |
11 ms |
5496 KB |
Output is correct |
11 |
Correct |
7 ms |
3576 KB |
Output is correct |
12 |
Correct |
5 ms |
3064 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1066 ms |
332028 KB |
Output is correct |
2 |
Correct |
1063 ms |
332244 KB |
Output is correct |
3 |
Correct |
322 ms |
12996 KB |
Output is correct |
4 |
Correct |
112 ms |
11896 KB |
Output is correct |
5 |
Correct |
1205 ms |
165660 KB |
Output is correct |
6 |
Correct |
1469 ms |
167124 KB |
Output is correct |
7 |
Correct |
1374 ms |
166848 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
4 ms |
2808 KB |
Output is correct |
2 |
Correct |
5 ms |
2808 KB |
Output is correct |
3 |
Correct |
4 ms |
2680 KB |
Output is correct |
4 |
Correct |
4 ms |
2808 KB |
Output is correct |
5 |
Correct |
4 ms |
2680 KB |
Output is correct |
6 |
Correct |
35 ms |
2680 KB |
Output is correct |
7 |
Correct |
14 ms |
7160 KB |
Output is correct |
8 |
Correct |
7 ms |
3064 KB |
Output is correct |
9 |
Correct |
5 ms |
2808 KB |
Output is correct |
10 |
Correct |
11 ms |
5496 KB |
Output is correct |
11 |
Correct |
7 ms |
3576 KB |
Output is correct |
12 |
Correct |
5 ms |
3064 KB |
Output is correct |
13 |
Correct |
1066 ms |
332028 KB |
Output is correct |
14 |
Correct |
1063 ms |
332244 KB |
Output is correct |
15 |
Correct |
322 ms |
12996 KB |
Output is correct |
16 |
Correct |
112 ms |
11896 KB |
Output is correct |
17 |
Correct |
1205 ms |
165660 KB |
Output is correct |
18 |
Correct |
1469 ms |
167124 KB |
Output is correct |
19 |
Correct |
1374 ms |
166848 KB |
Output is correct |
20 |
Correct |
1262 ms |
167092 KB |
Output is correct |
21 |
Correct |
67 ms |
9336 KB |
Output is correct |
22 |
Correct |
1207 ms |
167048 KB |
Output is correct |
23 |
Correct |
111 ms |
11640 KB |
Output is correct |
24 |
Correct |
1197 ms |
167012 KB |
Output is correct |
25 |
Correct |
306 ms |
11844 KB |
Output is correct |
26 |
Correct |
1111 ms |
336684 KB |
Output is correct |
27 |
Correct |
1088 ms |
336608 KB |
Output is correct |