제출 #585576

#제출 시각아이디문제언어결과실행 시간메모리
585576talant117408Chase (CEOI17_chase)C++17
0 / 100
4075 ms10712 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; typedef pair <int, int> pii; typedef pair <ll, ll> pll; #define pb push_back #define mp make_pair #define all(v) (v).begin(),(v).end() #define rall(v) (v).rbegin(),(v).rend() #define lb lower_bound #define ub upper_bound #define sz(v) int((v).size()) #define do_not_disturb ios::sync_with_stdio(0);cin.tie(0);cout.tie(0); #define endl '\n' const int N = 1e5 + 7; ll ans, pigeons[N], subtree[N]; int n, bread; vector <int> graph[N]; void dfs(int v, int p) { subtree[v] = 0; for (auto to : graph[v]) { if (to == p) continue; subtree[v] += pigeons[to]; dfs(to, v); } } void count(int v, int p, ll collected, int level = 1) { if (level == bread) { ans = max(ans, collected); return; } for (auto to : graph[v]) { if (to == p) continue; count(to, v, collected + subtree[to], level + 1); } } void solve() { cin >> n >> bread; for (int i = 1; i <= n; i++) { cin >> pigeons[i]; } for (int i = 0; i < n - 1; i++) { int a, b; cin >> a >> b; graph[a].pb(b); graph[b].pb(a); } for (int i = 1; i <= n; i++) { dfs(i, i); count(i, i, subtree[i]); } cout << ans; } int main() { do_not_disturb int t = 1; //~ cin >> t; while (t--) { solve(); } 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...