提交时间:2024-02-29 15:45:38

运行 ID: 26993

#include <bits/stdc++.h> using namespace std; typedef long long ll; const int N=1005,K=55; int n,k,sz[N]; ll l,r,a[N]; vector<int> e[N]; vector<ll> g[K],f[N][K]; void dfs(int x,int fa){ sz[x]=1; f[x][0].push_back(a[x]); for(int y:e[x]) if(y!=fa){ dfs(y,x); for(int i=0;i<=k&&i<=sz[x];i++) for(int j=0;i+j<=k&&j<=sz[y];j++) for(ll p:f[x][i]) for(ll q:f[y][j]) if(p+q<=r) g[i+j].push_back(p+q); sz[x]+=sz[y]; for(int i=0;i<=k&&i<=sz[x];i++){ f[x][i].clear(); sort(g[i].begin(),g[i].end()); for(ll t:g[i]){ while(f[x][i].size()>1&&t-f[x][i][f[x][i].size()-2]<=r-l) f[x][i].pop_back(); f[x][i].push_back(t); } g[i].clear(); } } for(int i=0;i<k;i++) for(ll t:f[x][i]) if(t>=l) {f[x][i+1].push_back(0);break;} } int main(){ scanf("%d%d%lld%lld",&n,&k,&l,&r);k++; for(int i=1;i<=n;i++){ scanf("%lld",&a[i]); if(a[i]>r){ while(k--) putchar('0'); return 0; } } for(int i=1,u,v;i<n;i++) scanf("%d%d",&u,&v),e[u].push_back(v),e[v].push_back(u); dfs(1,0); for(int i=1;i<=k;i++) putchar(count(f[1][i].begin(),f[1][i].end(),0)+'0'); return 0; }