luogu ide也过了……
#include<bits/stdc++.h>
using namespace std;
#define int long long
int n,m,k[100001],rsiz,rt,ans[100001],vis[100001],siz[100001],minn,a[100001],b[100001],d[100001],cnt;
vector<pair<int,int> >g[100001];bool cmp(int x,int y){return d[x]<d[y];}
int gr(int u,int fa){
siz[u]=1;int maxx=0;
for(auto v:g[u])if(v.first!=fa&&!vis[v.first])gr(v.first,u),siz[u]+=siz[v.first],maxx=max(maxx,siz[v.first]);
maxx=max(maxx,rsiz-siz[u]);if(minn>maxx)minn=maxx,rt=u;
}int gtds(int u,int fa,int len,int tp){a[++cnt]=u,d[u]=len,b[u]=tp;for(auto v:g[u])if(v.first!=fa&&!vis[v.first])gtds(v.first,u,len+v.second,tp);}
void dfs(int u){
cnt=0;a[++cnt]=u;d[u]=0,b[u]=u;
for(auto v:g[u])if(!vis[v.first])gtds(v.first,u,v.second,v.first);
sort(a+1,a+cnt+1,cmp);for(int i=1;i<=m;i++){
int l=1,r=cnt;if(ans[i])continue;
while(l<r){
if(d[a[l]]+d[a[r]]<k[i])l++;else if(d[a[l]]+d[a[r]]>k[i])r--;
else if(b[a[l]]==b[a[r]]){if(d[a[r]]==d[a[r-1]])r--;else l++;}
else{ans[i]=1;break;}
}
}
}
void calc(int u){vis[u]=1;dfs(u);for(auto v:g[u])if(!vis[v.first])rt=0,rsiz=siz[v.first],minn=1e18,gr(v.first,0),calc(rt);}
main(){
cin>>n>>m;for(int i=1,u,v,w;i<n;i++)cin>>u>>v>>w,g[u].push_back({v,w}),g[v].push_back({u,w});
for(int i=1;i<=m;i++)cin>>k[i];rsiz=n;rt=0;minn=1e18;gr(1,0);calc(rt);
for(int i=1;i<=m;i++)if(ans[i])puts("AYE");else puts("NAY");
return 0;
}