位运算为什么更慢了
查看原帖
位运算为什么更慢了
416388
a16_楼主2022/4/5 17:39

位运算

逻辑运算

代码中注释处即区别,求dalao解释一下

#include<bits/stdc++.h>
using std::max;
const int N=1e6+5;
struct tree{
	int l,r,w;
}t[N<<1];
int n;
void read(int &x){
	int f=1;
	char c=getchar();
	for(;!isdigit(c);c=getchar())
		if(c=='-') f=-1;
	for(;isdigit(c);c=getchar())
		x=x*10+c-48;
	x*=f;
}
void input(){
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
		read(t[i].w);
	for(int i=1;i<=n;i++)
		read(t[i].l),read(t[i].r);
}
bool sym(int a,int b){
	if(a==-1&&b==-1) return 1;
	if(a==-1||b==-1||t[a].w!=t[b].w) return 0;
	return sym(t[a].l,t[b].r)&&sym(t[a].r,t[b].l);//就这里,速度上差了不少
}
int num[N];
int dfs(int rt){
	if(rt==-1) return 0;
	return num[rt]=dfs(t[rt].l)+dfs(t[rt].r)+1;
}
int ans=-1;
void slove(){
	for(int i=1;i<=n;i++)
		if(sym(t[i].l,t[i].r))
			if(num[i]>ans)
				ans=num[i];
	printf("%d",ans);
}
int main(){
	input();
	dfs(1);
	slove();
	return 0;
}
2022/4/5 17:39
加载中...