#include<bits/stdc++.h>
using namespace std;
int fa[200050][32];
int de[200050];
vector<pair<int,pair<long long,long long> > > v[200050];
double d;
int n,q,x,y;
pair<long long,long long> a[200050];
pair<long long,long long> f[200050];
pair<long long,long long> pl(pair<long long,long long> x,pair<long long,long long> y)
{
return make_pair(x.first+y.first,x.second+y.second);
}
pair<long long,long long> mi(pair<long long,long long> x,pair<long long,long long> y)
{
return make_pair(x.first-y.first,x.second-y.second);
}
pair<long long,long long> fun(double x)
{
if(x==0) return make_pair(1000000,1000000);
long long a=0,b=0;
while(x!=int(x))
{
x*=10;
a--,b--;
}
int y=x;
while(y%2==0)
{
y/=2;
a++;
}
while(y%5==0)
{
y/=5;
b++;
}
return make_pair(a,b);
}
void dfs(int x)
{
int p=0;
while(fa[x][p])
{
fa[x][p+1]=fa[fa[x][p]][p];
p++;
}
for(auto yy : v[x])
{
int y=yy.first;
if(y==fa[x][0]) continue;
fa[y][0]=x;
de[y]=de[x]+1;
f[y]=pl(f[x],yy.second);
dfs(y);
}
}
int lca(int x,int y)
{
if(de[y]>de[x])
{
x+=y;
y=x-y;
x-=y;
}
for(int i=31;i>=0;i--)
{
if(de[fa[x][i]]>=de[y]) x=fa[x][i];
}
if(x==y) return x;
for(int i=31;i>=0;i--)
{
if(fa[x][i]-fa[y][i])
{
x=fa[x][i];
y=fa[y][i];
}
}
return fa[x][0];
}
bool check(pair<long long,long long> x)
{
return ((x.first>=0&&x.second>=0)?1:0);
}
int main()
{
cin>>n>>q;
for(int i=1;i<=n;i++)
{
cin>>d;
a[i]=fun(d);
}
for(int i=1;i<n;i++)
{
cin>>x>>y>>d;
pair<long long,long long> z=fun(d);
v[x].push_back(make_pair(y,z));
v[y].push_back(make_pair(x,z));
}
de[1]=1;
dfs(1);
for(int i=1;i<=q;i++)
{
cin>>x>>y;
int z=lca(x,y);
if(check(pl(a[x],pl(mi(f[x],f[z]),mi(f[y],f[z]))))) cout<<"Yes\n";
else cout<<"No\n";
}
return 0;
}
TLE 25pts求调,谢谢大佬们