rt,不知道哪错了
#include <bits/stdc++.h>
#define ll long long
#define INF 2147483647
const ll N = 1e4, M = 100, MAXN = 1e8;
struct edge {
ll nxt, to, w;
} e[2 * N + 5];
ll n, m, depp, cnt, tot, head[N + 5], q[M + 5], sz[N + 5], dis[N + 5], hson[N + 5], fa[N + 5], dfn[N + 5], rk[N + 5];
bool ans[M + 5], tf[MAXN + 5];
void add(ll u, ll v, ll w) {
e[++tot] = {head[u], v, w};
head[u] = tot;
}
void dfs(ll x, ll fthr) {
rk[dfn[x] = ++cnt] = x;
sz[x] = 1;
fa[x] = fthr;
for (ll i = head[x]; i; i = e[i].nxt) {
if (e[i].to == fthr) continue;
dis[e[i].to] = dis[x] + e[i].w;
dfs(e[i].to, x);
sz[x] += sz[e[i].to];
if (!hson[x] || sz[hson[x]] < sz[e[i].to])
hson[x] = e[i].to;
}
}
void upd(ll x) {
for (ll i = 1; i <= m; i++)
if (q[i] >= dis[x] - depp)
ans[i] |= tf[q[i] - dis[x] + depp];
}
void dfs1(ll x, bool flag) {
for (ll i = head[x]; i; i = e[i].nxt) {
if (e[i].to == fa[x] || e[i].to == hson[x]) continue;
dfs1(e[i].to, true);
}
if (hson[x]) dfs1(hson[x], false);
tf[dis[x]] = true;
depp = dis[x] << 1;
upd(x);
for (ll i = head[x]; i; i = e[i].nxt) {
if(e[i].to == fa[x] || e[i].to == hson[x]) continue;
for (ll j = dfn[e[i].to]; j < dfn[e[i].to] + sz[e[i].to]; j++)
upd(rk[j]);
for (ll j = dfn[e[i].to]; j < dfn[e[i].to] + sz[e[i].to]; j++)
tf[dis[rk[j]]] = true;
}
if (flag) {
for (ll i = head[x]; i; i = e[i].nxt) {
if (e[i].to == fa[x] || e[i].to == hson[x]) continue;
for (ll j = dfn[e[i].to]; j < dfn[e[i].to] + sz[e[i].to]; j++)
tf[dis[rk[j]]] = false;
}
}
}
int main() {
// freopen("P3806_6.in", "r", stdin);
scanf("%lld%lld", &n, &m);
for (ll i = 1; i < n; i++) {
ll u, v, w; scanf("%lld%lld%lld", &u, &v, &w);
add(u, v, w);
add(v, u, w);
}
for (ll i = 1; i <= m; i++)
scanf("%lld", q + i);
dfs(1, 0);
dfs1(1, false);
for (ll i = 1; i <= m; i++)
puts(ans[i] ? "AYE" : "NAY");
return 0;
}