Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
27042 | 岳亦铭 | 【BJ】T3 | C++ | 解答错误 | 0 | 1 MS | 2672 KB | 1601 | 2024-02-29 19:48:17 |
#include <bits/stdc++.h> using namespace std; #define int long long const int maxn=1e5+10; int n,m,L,R; int a[maxn]; vector<int> edge[maxn]; struct SOL1 { int f[60][60][210],ans[60]; void dfs(int u,int fa) { if(edge[u][0]==fa&&edge[u].size()==1) { if(a[u]>=L&&a[u]<=R) f[u][1][0]=1; if(a[u]<=R) f[u][0][a[u]]=1; return ; } bool flag=0; for(int i=0;i<edge[u].size();i++) { int v=edge[u][i]; if(v==fa) continue; dfs(v,u); if(!flag) { for(int j=0;j<=m;j++) { for(int k=R;k>=0;k--) { if(k<a[u]) break; f[u][j][k]|=f[v][j][k-a[u]]; } } flag=1; continue; } for(int j=m;j>=0;j--) { for(int k=R;k>=0;k--) { int t=0; for(int j1=0;j1<=m;j1++) { if(j1>j) break; for(int k1=0;k1<=R;k1++) { if(k1>k) break; t|=(f[u][j-j1][k-k1]&&f[v][j1][k1]); } } f[u][j][k]=t; } } } for(int j=m-1;j>=0;j--) { for(int k=L;k<=R;k++) f[u][j+1][0]|=f[u][j][k]; } } void sol() { dfs(1,0); for(int i=0;i<=m;i++) for(int k=L;k<=R;k++) ans[i]|=f[1][i][k]; for(int i=0;i<=m;i++) cout<<ans[i]; cout<<endl; } }sol1; signed main() { // freopen("large.in","r",stdin); // freopen("large.out","w",stdout); ios::sync_with_stdio(false); cin>>n>>m>>L>>R; for(int i=1;i<=n;i++) cin>>a[i]; int u,v; for(int i=1;i<n;i++) { cin>>u>>v; edge[u].push_back(v); edge[v].push_back(u); } return 0; if(R<=200) { sol1.sol(); return 0; } return 0; }