32pts,样例能过
查看原帖
32pts,样例能过
1245629
woscxk楼主2024/6/5 14:44
#include<bits/stdc++.h>
using namespace std;
struct node{
    int val,lc,rc;
}data[1000001];
int cnt=0;
queue<int> que;
int count(int id){
	if(id>0){
		return 1+count(data[id].lc)+count(data[id].rc);
	}
	return 0;
}
void pos1(int id){//先序
    if(id>0){
        que.push(data[id].val);
        pos1(data[id].lc);
        pos1(data[id].rc);
    }
}
void pos2(int id){
    if(id>0){
        if(data[id].val=que.front())que.pop();
        else return;
        pos2(data[id].rc);
        pos2(data[id].lc);
    }
}
bool check(int id){
	if(count(data[id].lc)!=count(data[id].rc))return 0;
	while(!que.empty())que.pop();
    pos1(data[id].lc);
    pos2(data[id].rc);
    if(que.empty())return 1;
    else return 0;
}

void solve(int id){
	if(id<=0)return;
	if(check(id)){
		cnt=max(cnt,count(id));
		return;
	}else{
		solve(data[id].lc);
		solve(data[id].rc);
	}
}
int main(){
    int n;
    cin>>n;
    for(int i=1;i<=n;i++)cin>>data[i].val;
    for(int i=1;i<=n;i++)cin>>data[i].lc>>data[i].rc;
    solve(1);
    cout<<cnt;
}
2024/6/5 14:44
加载中...