为什么本地运行和评测机结果不同
查看原帖
为什么本地运行和评测机结果不同
379926
xyz123楼主2024/7/6 16:50
#include<bits/stdc++.h>
using namespace std;
const int N=4e5+10;
int h[N],e[N],ne[N],w[N],idx,n;
void add(int a,int b){
	e[++idx]=b;
	ne[idx]=h[a];
	h[a]=idx;
}
int ans=0;
//int mem[N][20];
unordered_map<int,bool>ddd[N];
unordered_map<int,int>mem1[N];
int query(int u,int fa,int g){
	if(ddd[u][g])	return mem1[u][g];
	ddd[u][g]=1;
	if(w[u]%g){
		mem1[u][g]=1;
		return 0;
	}
	int t=0;
	for(int i=h[u];i;i=ne[i]){
		int j=e[i];
		if(j==fa)	continue;
		t=max(t,query(j,u,g));
	}
	mem1[u][g]=t+1;
	return mem1[u][g];
}
void solve(int u,int fa){
	int a[10],cnt;
	int y=w[u];
	for(int i=2;i*i<=y;i++){
		if(y%i==0){
			while(y%i==0)	y/=i;
			a[cnt++]=i;
		}
	}
	if(y!=1)	a[cnt++]=y;
	for(int k=0;k<cnt;k++){
		int h1=0,h2=0;
		for(int i=h[u];i;i=ne[i]){
			int j=e[i];
			if(j==fa)	continue;
			int s=query(j,u,a[k]);
			if(s>h1)	h2=h1,h1=s;
			else	if(s>h2)	h2=s;
			solve(j,u);
		}
		ans=max(ans,h1+h2+1);
	}
}
int main(){
	int n;
	scanf("%d",&n);
	for(int i=1;i<=n;i++)	scanf("%d",&w[i]);
	for(int i=1;i<n;i++){
		int a,b;
		scanf("%d%d",&a,&b);
		add(a,b);
		add(b,a);
	}
	solve(1,0);
	printf("%d\n",ans);
	return 0;
}

https://codeforces.com/contest/1101/submission/269041370

2024/7/6 16:50
加载中...