Submission #1311593

#TimeUsernameProblemLanguageResultExecution timeMemory
1311593HoriaHaivasPaprike (COI18_paprike)C++20
100 / 100
38 ms19060 KiB
#include<bits/stdc++.h> #define debug(x) cerr << #x << " " << x << "\n" #define debugs(x) cerr << #x << " " << x << " " #pragma GCC optimize("Ofast") #define int long long using namespace std; mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); int range_rng(int l, int r) { return uniform_int_distribution<int>(l,r)(rng); } struct info { int cuts; int compsize; }; info dp[100005]; int s[100005]; int k; vector<int> nodes[100005]; vector<int> nush; void dfs(int node, int parent) { int taieri,compsz; taieri=0; compsz=s[node]; for (auto x : nodes[node]) { if (x!=parent) { dfs(x,node); taieri+=dp[x].cuts; compsz+=dp[x].compsize; } } nush.clear(); for (auto x : nodes[node]) { if (x!=parent) { nush.push_back(dp[x].compsize); } } if (compsz<=k) { dp[node].cuts=taieri; dp[node].compsize=compsz; } else { sort(nush.begin(),nush.end()); while(compsz>k) { taieri++; compsz-=nush.back(); nush.pop_back(); } dp[node].cuts=taieri; dp[node].compsize=compsz; } } signed main() { /* ifstream fin("arbore.in"); ofstream fout("arbore.out"); */ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n,i,j,u,v; cin >> n >> k; for (i=1;i<=n;i++) cin >> s[i]; for (i=1;i<=n-1;i++) { cin >> u >> v; nodes[u].push_back(v); nodes[v].push_back(u); } dfs(1,-1); cout << dp[1].cuts; 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...