数据这一块
查看原帖
数据这一块
765713
pengzhining楼主2025/7/23 18:58
#include<bits/stdc++.h>
using namespace std;
const int N=1e6+10;
int a[N],l[N],r[N];
int n;
int s[N];
void dfs(int u){
    if(!u) return;
    dfs(l[u]);
    dfs(r[u]);
    s[u]=s[l[u]]+s[r[u]]+1;
}
int check(int ll,int rr){
    if(ll==0&&rr==0) return 1;
    if(ll==0||rr==0) return 0;
    if(s[ll]!=s[rr]||a[ll]!=a[rr]) return 0;
    return check(l[ll],r[ll])&&check(l[rr],r[rr]);
}
int ans=0;
int main(){
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>a[i];
    }
    for(int i=1;i<=n;i++){
        cin>>l[i]>>r[i];
        if(l[i]==-1) l[i]=0;
        if(r[i]==-1) r[i]=0;
    }
    dfs(1);
    for(int i=1;i<=n;i++){
        if(s[i]>ans&&check(l[i],r[i])) ans=s[i];
    }
    cout<<ans;
    return 0;
}

初看是不是感觉没什么问题,注意到 17 行。

    return check(l[ll],r[ll])&&check(l[rr],r[rr]);

是的,这样的写法拿了52

我的天哪CCF

验证码 6mwy

2025/7/23 18:58
加载中...