Submission #987794

#TimeUsernameProblemLanguageResultExecution timeMemory
987794VMaksimoski008Paprike (COI18_paprike)C++17
100 / 100
108 ms19536 KiB
#include <bits/stdc++.h> #define sz(x) (int)x.size() #define all(x) x.begin(), x.end() #define rall(x) x.rbegin(), x.rend() //#define int long long using namespace std; using ll = long long; using ull = unsigned long long; using ld = long double; using pii = pair<int, int>; using pll = pair<ll, ll>; const int mod = 1e9 + 7; const int LOG = 20; const int maxn = 1e5 + 5; const double eps = 1e-9; ll sub[maxn+5], n, k, ans = 0, val[maxn+5]; vector<int> graph[maxn]; void dfs(int u, int p) { sub[u] = val[u]; vector<ll> vec; for(int &v : graph[u]) { if(v == p) continue; dfs(v, u); vec.push_back(sub[v]); sub[u] += sub[v]; } if(sub[u] > k) { sort(all(vec)); ll sum = val[u]; for(ll &x : vec) { if(sum + x > k) { ans++; sub[u] -= x; } else { sum += x; } } } } int32_t main() { cin >> n >> k; for(int i=1; i<=n; i++) cin >> val[i]; for(int i=0; i<n-1; i++) { int a, b; cin >> a >> b; graph[a].push_back(b); graph[b].push_back(a); } dfs(1, 1); 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...