改前
WA:92pts AC:8pts
#include<iostream>
#define int long long
using namespace std;
inline int read()
{
int x=0,f=1;
char s;
s=getchar();
while(s<'0'||s>'9')
{
if(s=='-')f=-f;
s=getchar();
}
while(s>='0'&&s<='9')
{
x=(x<<3)+(x<<1)+(s-48);
s=getchar();
}
return x*f;
}
const int N=1e6+1;
struct node
{
int lch;
int rch;
int val;
}tree[N];
int n;
int ans;
bool bitr(int nleft,int nright)
{
if(nleft==-1&&nright==-1)return true;
if(nleft==-1||nright==-1)return false;
if(tree[nleft].val!=tree[nright].val)return false;
if(bitr(tree[nleft].lch,tree[nright].rch)&&bitr(tree[nleft].rch,tree[nright].lch))return true;
}
int sum(int nd)
{
if(nd==-1)return 0;
return 1+sum(tree[nd].lch)+sum(tree[nd].rch);
}
int max(int x,int y)
{
return x>y?x:y;
}
signed main()
{
int i,r;
n=read();
for(i=1;i<=n;i++)tree[i].val=read();
for(i=1;i<=n;i++)
{
tree[i].lch=read();
tree[i].rch=read();
}
for(i=1;i<=n;++i)
{
if(bitr(i,i))ans=max(sum(i),ans);
}
printf("%lld",ans);
return 0;
}
改后(第39行不一样)
AC:100pts
#include<iostream>
#define int long long
using namespace std;
inline int read()
{
int x=0,f=1;
char s;
s=getchar();
while(s<'0'||s>'9')
{
if(s=='-')f=-f;
s=getchar();
}
while(s>='0'&&s<='9')
{
x=(x<<3)+(x<<1)+(s-48);
s=getchar();
}
return x*f;
}
const int N=1e6+1;
struct node
{
int lch;
int rch;
int val;
}tree[N];
int n;
int ans;
bool bitr(int nleft,int nright)
{
if(nleft==-1&&nright==-1)return true;
if(nleft==-1||nright==-1)return false;
if(tree[nleft].val!=tree[nright].val)return false;
return bitr(tree[nleft].lch,tree[nright].rch)&&bitr(tree[nleft].rch,tree[nright].lch);
}
int sum(int nd)
{
if(nd==-1)return 0;
return 1+sum(tree[nd].lch)+sum(tree[nd].rch);
}
int max(int x,int y)
{
return x>y?x:y;
}
signed main()
{
int i,r;
n=read();
for(i=1;i<=n;i++)tree[i].val=read();
for(i=1;i<=n;i++)
{
tree[i].lch=read();
tree[i].rch=read();
}
for(i=1;i<=n;++i)
{
if(bitr(i,i))ans=max(sum(i),ans);
}
printf("%lld",ans);
return 0;
}
为什么是这样?(玄关)