| 比赛 |
2026.5.16 |
评测结果 |
WTTEEETTTT |
| 题目名称 |
填树 |
最终得分 |
0 |
| 用户昵称 |
LikableP |
运行时间 |
13.256 s |
| 代码语言 |
C++ |
内存使用 |
3.42 MiB |
| 提交时间 |
2026-05-16 12:01:22 |
显示代码纯文本
#include <cstdio>
#include <vector>
#include <algorithm>
int n, K;
int l[10], r[10];
int a[10];
std::vector<int> g[10];
int ans1, ans2;
void chk(int now) {
int max = -1, min = 1000000001, sum = 0;
for (int i = 1; i <= now; ++i) {
max = std::max(max, a[i]);
min = std::min(min, a[i]);
sum += a[i];
}
if (max - min <= K) {
ans1 += 1;
ans2 += sum;
}
}
void dfs(int now, int fa) {
for (int i = l[now]; i <= r[now]; ++i) {
a[now] = i;
chk(now);
for (int v : g[now]) if (v != fa && a[v] == 0) {
dfs(v, now);
}
a[now] = 0;
}
}
int main() {
freopen("tree.in", "r", stdin);
freopen("tree.out", "w", stdout);
scanf("%d %d", &n, &K);
for (int i = 1; i <= n; ++i) {
scanf("%d %d", &l[i], &r[i]);
}
for (int i = 1, u, v; i <= n - 1; ++i) {
scanf("%d %d", &u, &v);
g[u].push_back(v);
g[v].push_back(u);
}
for (int i = 1; i <= n; ++i) dfs(i, 0);
printf("%d\n%d\n", ans1 / 2, ans2 / 2);
return 0;
}