社区讨论
80pts求调
P5018[NOIP 2018 普及组] 对称二叉树参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mhjruuln
- 此快照首次捕获于
- 2025/11/04 07:29 4 个月前
- 此快照最后确认于
- 2025/11/04 07:29 4 个月前
CPP
#include <bits/stdc++.h>
using namespace std;
#define int long long
int read(){
char c=getchar();
bool b=0;
while(c<'0'||c>'9'){
if(c=='-'){
b=1;
}
c=getchar();
}
int res=0;
while(c>='0'&&c<='9'){
res=res*10+(c-'0');
c=getchar();
}
if(b){
return -res;
}
return res;
}
void put(int num){
while(num!=0){
putchar((num%10)+'0');
num/=10;
}
return;
}
const int N=1e6+30;
struct Tree{
int data;
int l,r;
}tree[N];
bool check(int l,int r){
if(l==-1&&r==-1){
return 1;
}
if(l==-1||r==-1){
return 0;
}
if(tree[l].data!=tree[r].data){
return 0;
}
return check(tree[l].l,tree[r].r)&&check(tree[l].r,tree[r].l);
}
int subtree(int o){
if(o==-1){
return 0;
}
return subtree(tree[o].l)+subtree(tree[o].r)+1;
}
signed main(){
int n=read();
for(int i=1;i<=n;i++){
cin>>tree[i].data;
}
for(int i=1;i<=n;i++){
int L=read(),R=read();
tree[i].l=L;
tree[i].r=R;
}
int ans=1;
for(int i=1;i<=n;i++){
if(check(tree[i].l,tree[i].r)){
ans=max(ans,subtree(i));
}
}
put(ans);
return 0;
}
回复
共 0 条回复,欢迎继续交流。
正在加载回复...