看到都说数据水直接暴力就可以了,但是为什么本蒟蒻还是TLE了4个点
#include<bits/stdc++.h>
using namespace std;
int n,k;
int cnt;
int x,y,z;
int s[210000];
int a[210000];
int fa[210000];
bool pd[51000];
int read(){
int r=0;
char c=getchar();
while(c<'0'||c>'9'){
c=getchar();
}
while(c>='0'&&c<='9'){
r=(r<<3)+(r<<1)+c-'0';
c=getchar();
}
return r;
}
int main(){
n=read(),k=read();
for(int i=1;i<=n;i++){
a[i]=read();
}
for(int i=1;i<n;i++){
x=read(),y=read();
fa[y]=x;
}
for(int i=2;i<=50000;i++){
if(pd[i]==0){
cnt++;
s[cnt]=i;
for(int j=i+i;j<=50000;j+=i){
pd[i]=1;
}
}
}
while(k--){
z=read();
if(z==1){
x=read();
int now=x;
bool flag=0;
while(x){
int sum=1;
int p=min(a[x],a[fa[x]]);
while(s[sum]<=p){
if(s[sum]==0){
break;
}
if(a[now]%s[sum]==0&&a[fa[x]]%s[sum]==0){
cout<<fa[x]<<endl;
flag=1;
break;
}
sum++;
}
if(flag==1){
break;
}
x=fa[x];
}
if(flag==0){
cout<<-1<<endl;
}
}
else{
x=read(),y=read();
a[x]=y;
}
}
return 0;
}