Submission #1293780

#TimeUsernameProblemLanguageResultExecution timeMemory
1293780darkdevilvaqifPaprike (COI18_paprike)C++20
13 / 100
26 ms10664 KiB
#pragma GCC optimize("O3") #pragma GCC optimize ("unroll-loops") // #pragma GCC target("avx2") #include <bits/stdc++.h> #define ll long long #define ull unsigned ll #define ld long double #define all(v, l) v.begin() + l, v.end() #define rall(v, l) v.rbegin(), v.rend() - l #define pb push_back #define pf push_front #define rsz resize #define fi first #define se second #define LMAX LLONG_MAX #define LMIN LLONG_MIN #define IMAX INT_MAX #define IMIN INT_MIN #define endl "\n" #define newline cout << endl; using namespace std; // structs struct graph { vector <vector <int> > g; vector <ll> lvl; void prep(int n) { g.rsz(n); lvl.rsz(n); } int limit, cnt; void DFS(int v, int par) { for (auto u : g[v]) { if (par == u) { continue; } DFS(u, v); if (lvl[u] + lvl[v] > limit) { cnt++; } else { lvl[v] += lvl[u]; } } } void cleanse() { cnt = 0; } }; // globals // variables int n, k; // iterators int i; // notes /* -stuff you should look for- * int overflow, array bounds * special cases (n=1?) * do something instead of nothing and stay organized * WRITE STUFF DOWN * DON'T GET STUCK ON ONE APPROACH continue - skip the rest in the loop */ // functions ll GCD(ll numeroune, ll numerodeux); ll LCM(ll numeroune, ll numerodeux); ll power(ll numeroune, ll numerodeux); void solve() { graph G; cin >> n >> k; G.prep(n + 1); for (i = 1; i <= n; i++) { cin >> G.lvl[i]; } for (i = 1; i < n; i++) { int u, v; cin >> u >> v; G.g[u].pb(v); G.g[v].pb(u); } G.cleanse(); G.limit = k; G.DFS(1, -1); cout << G.cnt; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); int t = 1; // cin >> t; while (t--) { solve(); newline } } ll GCD(ll numeroune, ll numerodeux) { if (!numeroune) { return numerodeux; } return GCD(numerodeux % numeroune, numeroune); } ll LCM(ll numeroune, ll numerodeux) { return numeroune * numerodeux / GCD(numeroune, numerodeux); } ll power(ll numeroune, ll numerodeux) { ll res = 1; while (numerodeux) { if (numerodeux & 1) { res *= numeroune; } numeroune *= numeroune; numerodeux >>= 1; } return res; } /* $$$$$$$$\ $$$$$$$$\ $$ _____|\____$$ | $$ | $$ / $$$$$\ $$ / $$ __| $$ / $$ | $$ / $$$$$$$$\ $$$$$$$$\ \________|\________| */
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...