WA#23求救
查看原帖
WA#23求救
555065
ChrysanthBlossom楼主2023/7/30 17:32

就只挖了#23

代码:

#include<bits/stdc++.h>
#define ri register int
#define int long long
using namespace std;
const int maxn=261326,maxm=613262,inf=2147483647;
int n,m;
int cnt,head[maxn],to[maxm],nxt[maxm],bq2[maxm],bq5[maxm];
void add(int u,int v,int w2,int w5){
	++cnt;
	to[cnt]=v;
	nxt[cnt]=head[u];
	head[u]=cnt;
	bq2[cnt]=w2;bq5[cnt]=w5;
}
int a2[maxn],a5[maxn],b2[maxn],b5[maxn];
int siz[maxn],son[maxn],f[maxn],dep[maxn];
int val[maxn];
void dfs1(int u,int fa){
	f[u]=fa;
	dep[u]=dep[fa]+1;
	siz[u]=1;
	int maxi=0;
	for(ri e=head[u];e;e=nxt[e]){
		int v=to[e];
		if(v==fa)continue;
		b2[v]=b2[u]+bq2[e];
		b5[v]=b5[u]+bq5[e];
		dfs1(v,u);
		siz[u]+=siz[v];
		if(siz[v]>maxi){
			maxi=siz[v];
			son[u]=v;
		}
	}
}
int top[maxn];
void dfs2(int u,int topf){
	top[u]=topf;
	if(son[u])dfs2(son[u],topf);
	for(ri e=head[u];e;e=nxt[e]){
		int v=to[e];
		if(v^f[u]&&v^son[u])dfs2(v,v);
	}
}
int gcd(int a,int b){
	return(b?gcd(b,a%b):a);
}
int lca(int a,int b){
	while(top[a]^top[b]){
		if(dep[top[a]]<dep[top[b]])swap(a,b);
		a=f[top[a]];
	}if(dep[a]>dep[b])swap(a,b);
	return a;
}
signed main(){
	//freopen("lg.in","r",stdin);
	//freopen("lg.out","w",stdout);
	ios::sync_with_stdio(0);
	cin>>n>>m;
	for(ri i=1;i<=n;i++){
		int g;cin>>g;
		if(g==0){
			a2[i]=-1;
			continue;
		}
		int c2=0,c5=0;
		while(!(g%2)){
			g/=2;
			c2++;
		}
		while(!(g%5)){
			g/=5;
			c5++;
		}a2[i]=c2;
		a5[i]=c5;
		//cout<<i<<' '<<c2<<' '<<c5<<endl;
	}
	for(ri i=1,u,v;i<n;i++){
		double w;
		cin>>u>>v>>w;
		if(w==0){
			add(u,v,-inf,-inf);
			add(v,u,-inf,-inf);
			continue;
		}
		int g=gcd(1e4,w*1e4);
		g=1e4/g;
		int c2=0,c5=0;
		while(!(g%2)){
			g/=2;
			c2++;
		}
		while(!(g%5)){
			g/=5;
			c5++;
		}
		//cout<<u<<' '<<v<<' '<<c2<<' '<<c5<<endl;
		add(u,v,c2,c5);
		add(v,u,c2,c5);
	}
	dfs1(1,0);
	dfs2(1,1);
	while(m--){
		int a,b;
		cin>>a>>b;
		int l=lca(a,b);
		int c2=b2[a]+b2[b]-2*b2[l];
		int c5=b5[a]+b5[b]-2*b5[l];
		if(a2[a]>=c2&&a5[a]>=c5||a2[a]==-1)cout<<"Yes\n";
		else cout<<"No\n";
	}
	//fclose(stdin);
	//fclose(stdout);
    return 0;
}
2023/7/30 17:32
加载中...