改整整一天了……求助大佬!!!!
查看原帖
改整整一天了……求助大佬!!!!
400468
Aakkosetsumussa楼主2023/7/3 17:07
#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;
}

感觉思路也没什么问题

2023/7/3 17:07
加载中...