说好的暴力为什么T了四个点啊
查看原帖
说好的暴力为什么T了四个点啊
138799
jzdywf楼主2021/9/11 20:09

看到都说数据水直接暴力就可以了,但是为什么本蒟蒻还是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;
}
2021/9/11 20:09
加载中...