Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
26991 | gaochunzhen | 【BJ】T3 | C++ | 运行出错 | 20 | 22 MS | 1772 KB | 1945 | 2024-02-29 15:38:31 |
#include <bits/stdc++.h> using namespace std; typedef long long LL; const int N = 1e3 + 9, M = 59; vector<int> G[N]; int n, m; LL L, R, a[N]; namespace sub1 { bool dp[2][M][M][209]; void dfs(int u, int fa) { dp[0][u][0][a[u]] = 1; int fl = 0; for (int v : G[u]) { if (v == fa) continue; dfs(v, u), fl ^= 1; for (int i = 0; i <= m; i++) { for (int j = 0; j <= R; j++) dp[fl][u][i][j] = 0; } for (int i = 0; i <= m; i++) { for (int j = 0; j <= R; j++) { if (!dp[fl ^ 1][u][i][j]) continue; for (int x = 0; x <= m - i; x++) { for (int y = 0; y <= R - j; y++) { dp[fl][u][i + x][j + y] |= dp[0][v][x][y]; } } for (int x = 0; x < m - i; x++) { for (int y = L; y <= R; y++) { dp[fl][u][i + x + 1][j] |= dp[0][v][x][y]; } } } } } if (fl) { for (int i = 0; i <= m; i++) { for (int j = 0; j <= R; j++) dp[0][u][i][j] = dp[1][u][i][j]; } } } void Main() { dfs(1, 0); for (int i = 0; i <= m; i++) { int res = 0; for (int j = L; j <= R; j++) res |= dp[0][1][i][j]; putchar(res + '0'); } putchar('\n'); } } signed main() { scanf("%d%d%lld%lld", &n, &m, &L, &R); for (int i = 1; i <= n; i++) { scanf("%lld", &a[i]); assert(a[i] > 0 && a[i] <= 1e18); } for (int i = 1; i < n; i++) { int u, v; scanf("%d%d", &u, &v); G[u].push_back(v); G[v].push_back(u); } sub1::Main(); return 0; }