#include<bits/stdc++.h>
using namespace std;
typedef long long inr;
const inr maxn=5000005;
struct node {
inr v,w;
};
vector<node> e[maxn];
inr n,m,tot=0,f[maxn][25];
inr w2[maxn],w5[maxn],a[maxn],d[maxn],x,y;
double z;
inline inr cal(inr x,inr y) {
if(x==0) return 1e10;
inr r=0,c=x;
while(c&&c%y==0) r++,c/=y;
return r;
}
inline void dfs(inr u,inr fa,inr wt) {
d[u]=d[fa]+1;
f[u][0]=fa;
w2[u]=w2[fa]+cal(wt,2);
w5[u]=w5[fa]+cal(wt,5);
cout<<u<<" "<<w2[u]<<" "<<wt<<endl;
for(inr i=1; (i<<1)<=d[u]; i++) f[u][i]=f[f[u][i-1]][i-1];
for(inr i=0; i<e[u].size(); i++)
if(e[u][i].v!=fa) dfs(e[u][i].v,u,e[u][i].w);
}
inline inr lca(inr u,inr b) {
if(d[u]>d[b]) swap(u,b);
for(inr i=20; i>=0; i--)
if(d[u]<=d[b]-(1<<i)) y=f[b][i];
if(u==b) return x;
for(inr i=20; i>=0; i--)
if(f[u][i]!=f[b][i]) u=f[u][i],b=f[b][i];
return f[u][0];
}
#define N(a,b) (node){a,b}
main() {
cin>>n>>m;
for(inr i=1; i<=n; i++) cin>>a[i];
for(inr i=1; i<=n; i++) {
cin>>x>>y>>z;
inr tz=z*10000;
e[x].push_back(N(y,tz)),e[y].push_back(N(x,tz));
}
dfs(1,0,1);
for(inr i=1; i<=m; i++) {
cin>>x>>y;
inr L=lca(x,y);
inr N2=cal(a[x]*1e4,2),N5=cal(a[x]*1e4,5);
inr D2=N2+w2[x]+w2[y]-2*w2[L];
inr D5=N5+w5[x]+w5[y]-2*w5[L];
inr S=d[x]+d[y]-2*d[L];
// cout<<4*(S+1)<<" "<<min(D2,D5)<<endl;
if(4*(S+1)<=min(D2,D5)) cout<<"Yes\n";
else cout<<"No\n";
}
return 0;
}
感觉思路也没什么问题