#include <bits/stdc++.h>
using namespace std;
int const NMAX=100005;
int n,k;
int v[NMAX];
vector<int>tree[NMAX];
void read(){
cin>>n>>k;
int i;
for(i=1;i<=n;++i)
cin>>v[i];
for(i=1;i<n;++i){
int u,v;
cin>>u>>v;
tree[u].push_back(v);
tree[v].push_back(u);
}
}
int tai[NMAX];
int sum[NMAX];
void dfs(int nod,int tata){
long long s=v[nod];
vector<int>sms;
for(auto fiu : tree[nod])
if(fiu!=tata){
dfs(fiu,nod);
tai[nod]+=tai[fiu];
s+=sum[fiu];
sms.push_back(sum[fiu]);
}
sort(sms.begin(),sms.end());
while(s>k){
s-=sms.back();
sms.pop_back();
++tai[nod];
}
sum[nod]=s;
}
int main()
{
read();
dfs(1,0);
cout<<tai[1];
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |