Technoblade(2)

2023-08-07 13:34 至 2023-08-09 16:00
时长: 2天2小时26分钟

已有3人报名

比赛说明

eg.
    #include<stdio.h>
typedef struct Tree{
    int num;
    int l,r;
    int size;
}T;
T tree[1000005];
int maxLen=1;
int judgeFullTree(int l,int r) {
	if(l==-1&&r==-1) return 1;
	if(l==-1) return 0;
	if(r==-1) return 0;
	if(tree[l].num!=tree[r].num)return 0;
	if(judgeFullTree(tree[l].l,tree[r].r)&&judgeFullTree(tree[l].r,tree[r].l)){
		return 1;
	}
    return 0;
}
void dfsTree(int i) {
    tree[i].size=1;
    if(tree[i].l!=-1){
        dfsTree(tree[i].l);
        tree[i].size+=tree[tree[i].l].size;
    }
    if(tree[i].r!=-1){
        dfsTree(tree[i].r);
        tree[i].size+=tree[tree[i].r].size;
    }
}

int main() {
    
    int n;
    scanf("%d",&n);
    for(int i=1;i<=n;i++){
        scanf("%d",&tree[i].num);
    }
    for(int i=1;i<=n;i++){
        scanf("%d %d",&tree[i].l,&tree[i].r);
    }
	dfsTree(1);
	for(int i=1;i<=n;i++){
		if(judgeFullTree(tree[i].l,tree[i].r)){
			maxLen=tree[i].size>maxLen?tree[i].size:maxLen;
		}
	}
    printf("%d",maxLen);
}