Submission #393957

# Submission time Handle Problem Language Result Execution time Memory
393957 2021-04-25T03:45:51 Z Return_0 Chase (CEOI17_chase) C++17
100 / 100
283 ms 158980 KB
#pragma GCC optimize("Ofast,unroll-loops")
// #pragma comment(linker, "/stack:200000000")
// #pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,avx2,fma,tune=native")

#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>

using namespace std;
using namespace __gnu_pbds;

typedef long long ll;
typedef long double ld;
typedef pair <ll, ll> pll;

#ifdef SINA
#define dbg(...) __f(#__VA_ARGS__, __VA_ARGS__)
template <typename Arg1> void __f(const char* name, Arg1&& arg1) { cout << name << " : " << arg1 << std::endl; }
template <typename Arg1, typename... Args> void __f (const char* names, Arg1&& arg1, Args&&... args) {
	const char* comma = strchr(names + 1, ',');cout.write(names, comma - names) << " : " << arg1<<" | ";__f(comma+1, args...); }
#define dbg2(x, j, n) cout<< #x << " : "; output((j), (n), x, 1); cout.flush();
#else
#define dbg(...) 0
#define dbg2(x, j, n) 0
#endif
#define SZ(x) ((ll)((x).size()))
#define File(s, t) freopen(s ".txt", "r", stdin); freopen(t ".txt", "w", stdout);
#define input(j, n, a) for (int _i = (j); _i < (n)+(j); _i++) cin>> a[_i];
#define output(j, n, a, t) for (int _i = (j); _i < (n)+(j); _i++) cout<< a[_i] << (((t) && _i != (n)+(j)-1)? ' ' : '\n');
#define kill(x) return cout<< (x) << endl, 0
#define cl const ll
#define fr first
#define sc second
#define lc (v << 1)
#define rc (lc | 1)
#define mid ((l + r) >> 1)
#define All(x) (x).begin(), (x).end()

cl inf = sizeof(ll) == 4 ? (1e9 + 10) : (3e18), mod = 1e9 + 7, MOD = 998244353;

template <class A,class B> ostream& operator << (ostream& out,const pair<A,B>&a){return out<<'('<<a.first<<", "<<a.second<<')';}
template <class A> ostream& operator << (ostream& out, const vector<A> &a) {
	out<< '['; for (int i = -1; ++i < int(a.size());) out<< a[i] << (i + 1 < int(a.size()) ? ", " : ""); return out<<']'; }
template <class T, typename _t = less <T> > using Tree = tree <T, null_type, _t, rb_tree_tag, tree_order_statistics_node_update>;

cl N = 1e5 + 3, K = 1e2 + 3;

ll val [N], dp1 [N][K], dp2 [N][K], ans;
int a [N], n, k;
vector <int> adj [N];

void dfs (const int &v = 1, const int pr = 0) {
	dp1[v][1] = val[v];
	for (auto &u : adj[v]) if (u != pr) {
		dfs(u, v);
		ll pd1, pd2;
		for (int i = 1; i < k; i++) {
			pd1 = max(dp1[u][i], dp1[u][i - 1] + val[v] - a[u]), pd2 = max(dp2[u][i], dp2[u][i - 1] + val[u] - a[v]);
			ans = max(ans, max(dp1[v][k - i] + pd2, dp2[v][k - i] + pd1));
			ans = max(ans, dp2[u][i] + val[v]);
		}
		for (int i = 1; i <= k; i++) {
			pd1 = max(dp1[u][i], dp1[u][i - 1] + val[v] - a[u]), pd2 = max(dp2[u][i], dp2[u][i - 1] + val[u] - a[v]);
			dp1[v][i] = max(dp1[v][i], pd1);
			dp2[v][i] = max(dp2[v][i], pd2);
			ans = max(ans, dp1[v][i]);
		}
	}
}

int main ()
{
	ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);

	cin>> n >> k;
	input(1, n, a);
	for (int i = 1, v, u; i < n; i++) {
		cin>> v >> u;
		adj[v].push_back(u);
		adj[u].push_back(v);
		val[v] += a[u];
		val[u] += a[v];
	}

	if (!k) kill(0);
	ans = *max_element(val, val + N);
	dfs();

	cout<< ans << endl;

	cerr<< "\nTime elapsed: " << 1000 * clock() / CLOCKS_PER_SEC << "ms\n";

	return 0;
}
/*
12 3
2 3 3 8 1 5 6 7 8 3 5 4
2 1
2 7
3 4
4 7
7 6
5 6
6 8
6 9
7 10
10 11
10 12

*/
# Verdict Execution time Memory Grader output
1 Correct 2 ms 2636 KB Output is correct
2 Correct 3 ms 2636 KB Output is correct
3 Correct 2 ms 2636 KB Output is correct
4 Correct 2 ms 2636 KB Output is correct
5 Correct 2 ms 2636 KB Output is correct
6 Correct 2 ms 2680 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 2636 KB Output is correct
2 Correct 3 ms 2636 KB Output is correct
3 Correct 2 ms 2636 KB Output is correct
4 Correct 2 ms 2636 KB Output is correct
5 Correct 2 ms 2636 KB Output is correct
6 Correct 2 ms 2680 KB Output is correct
7 Correct 4 ms 3916 KB Output is correct
8 Correct 3 ms 3972 KB Output is correct
9 Correct 3 ms 3532 KB Output is correct
10 Correct 4 ms 4172 KB Output is correct
11 Correct 3 ms 4172 KB Output is correct
12 Correct 4 ms 4096 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 237 ms 135540 KB Output is correct
2 Correct 213 ms 135480 KB Output is correct
3 Correct 164 ms 90288 KB Output is correct
4 Correct 150 ms 156864 KB Output is correct
5 Correct 283 ms 158916 KB Output is correct
6 Correct 239 ms 158788 KB Output is correct
7 Correct 244 ms 158656 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 2636 KB Output is correct
2 Correct 3 ms 2636 KB Output is correct
3 Correct 2 ms 2636 KB Output is correct
4 Correct 2 ms 2636 KB Output is correct
5 Correct 2 ms 2636 KB Output is correct
6 Correct 2 ms 2680 KB Output is correct
7 Correct 4 ms 3916 KB Output is correct
8 Correct 3 ms 3972 KB Output is correct
9 Correct 3 ms 3532 KB Output is correct
10 Correct 4 ms 4172 KB Output is correct
11 Correct 3 ms 4172 KB Output is correct
12 Correct 4 ms 4096 KB Output is correct
13 Correct 237 ms 135540 KB Output is correct
14 Correct 213 ms 135480 KB Output is correct
15 Correct 164 ms 90288 KB Output is correct
16 Correct 150 ms 156864 KB Output is correct
17 Correct 283 ms 158916 KB Output is correct
18 Correct 239 ms 158788 KB Output is correct
19 Correct 244 ms 158656 KB Output is correct
20 Correct 249 ms 158980 KB Output is correct
21 Correct 50 ms 9108 KB Output is correct
22 Correct 251 ms 158676 KB Output is correct
23 Correct 168 ms 156748 KB Output is correct
24 Correct 247 ms 158944 KB Output is correct
25 Correct 161 ms 89844 KB Output is correct
26 Correct 207 ms 135620 KB Output is correct
27 Correct 211 ms 135620 KB Output is correct