1 条题解

  • 0
    @ 2023-9-20 22:08:15
    #include <iostream>
    #include <cstdio>
     
    const int maxn = 1000005;
     
    int max(int a, int b) {
        return a > b ? a : b;
    }
     
    struct Node {
        int l;
        int r;
        int val;
        int size;
    }node[maxn];
     
    void getSize(int u) {
        if(node[u].l != -1) {
            getSize(node[u].l);
            node[u].size += node[node[u].l].size;
        }
        if(node[u].r != -1) {
            getSize(node[u].r);
            node[u].size += node[node[u].r].size;
        }
    }
     
    bool checkVal(int u, int v) {
        if(u == -1 && v == -1) return true;
        if(node[u].val == node[v].val && checkVal(node[u].l, node[v].r) && checkVal(node[u].r, node[v].l))
            return true;
        return false;
    }
     
    int main() {
        int n, ans = 0;
        scanf("%d",&n);
        for(int i = 1; i <= n; i++) {
            scanf("%d", &node[i].val);
            node[i].size = 1;
        }
        for(int i = 1; i <= n; i++)
            scanf("%d%d", &node[i].l, &node[i].r);
     
        getSize(1);
        for(int i = 1; i <= n; i++)
            if(checkVal(node[i].l, node[i].r))
                ans = max(ans, node[i].size);
        
        printf("%d\n",ans);
        return 0;
    }
    
    • 1

    信息

    ID
    986
    时间
    1000ms
    内存
    256MiB
    难度
    8
    标签
    递交数
    16
    已通过
    8
    上传者