제출 #598020

#제출 시각아이디문제언어결과실행 시간메모리
598020OttoTheDinoChase (CEOI17_chase)C++17
40 / 100
363 ms524288 KiB
#include <bits/stdc++.h> using namespace std; #define rep(i,s,e) for (ll i = s; i <= e; ++i) #define rrep(i,s,e) for (ll i = s; i >= e; --i) #define pb push_back #define pf push_front #define fi first #define se second #define all(a) a.begin(), a.end() #define len(a) (ll)a.size() typedef long long ll; typedef pair<ll, ll> ii; typedef pair<ll, ll> pll; typedef vector<ii> vii; typedef vector<ll> vi; typedef vector<double> vd; typedef vector<string> vs; typedef vector<ll> vll; const ll mx = 1e5, mxv = 100; ll p[mx+1], s[mx+1]; vi adj[mx+1]; map<int,ll> dp[mx+1][mxv+1]; ll dp2[mx+1][mxv+1], done[mx+1][mxv+1]; ll dfs (int u, int par, int cnt) { if (cnt==0) return 0; if (dp[u][cnt].find(par)!=dp[u][cnt].end()) return dp[u][cnt][par]; dp[u][cnt][par] = s[u]-p[par]; for (int v : adj[u]) { if (v==par) continue; dp[u][cnt][par] = max(dp[u][cnt][par], max(s[u]-p[par]+dfs(v,u,cnt-1), dfs(v,u,cnt))); } return dp[u][cnt][par]; } ll dfs2 (int u, int par, int cnt) { if (cnt==0) return 0; if (done[u][cnt]) return dp2[u][cnt]; dp2[u][cnt] = s[u]-p[par]; for (int v : adj[u]) { if (v==par) continue; dp2[u][cnt] = max(dp2[u][cnt], max(s[u]-p[par]+dfs2(v,u,cnt-1), dfs2(v,u,cnt))); } done[u][cnt] = 1; return dp2[u][cnt]; } int main() { ios::sync_with_stdio(0); cin.tie(0); ll n, l; cin >> n >> l; rep (i,1,n) cin >> p[i]; rep (i,1,n-1) { ll u, v; cin >> u >> v; adj[u].pb(v); adj[v].pb(u); } rep (i,1,n) for (int v : adj[i]) s[i] += p[v]; if (n>1000) { cout << dfs2 (1, 0, l) << "\n"; return 0; } ll ans = 0; rep (i,1,n) { ans = max(ans, dfs (i, 0, l)); } cout << ans << "\n"; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...