Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
26993 | 岳亦铭 | 【BJ】T3 | C++ | 通过 | 100 | 6 MS | 3220 KB | 1136 | 2024-02-29 15:45:38 |
#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; }