求助
查看原帖
求助
741732
small_Dongpo楼主2023/10/1 15:05
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
using namespace std;

typedef long long ll;
ll n, a[1000005], l[1000005], r[1000005], cnt[1000005], maxn = 0;
string sl[1000005], sr[1000005];

ll size(ll x) {
    if (cnt[x] != 0) return cnt[x];
    cnt[x] = 1;
    if (l[x] != -1) cnt[x] += size(l[x]);
    if (r[x] != -1) cnt[x] += size(r[x]);
    return cnt[x];
}

string left(ll x) {
    if (sl[x] != "") return sl[x];
    if (l[x] != -1) {
        sl[x] += left(l[x]);
        sl[x].push_back(' ');
    }
    sl[x] += a[x];
    if (r[x] != -1) {
        sl[x].push_back(' ');
        sl[x] += left(r[x]);
    }
    return sl[x];
}

string right(ll x) {
    if (sr[x] != "") return sr[x];
    if (r[x] != -1) {
        sr[x] += right(r[x]);
        sr[x].push_back(' ');
    }
    sr[x] += a[x];
    if (l[x] != -1) {
        sr[x].push_back(' ');
        sr[x] += right(l[x]);
    }
    return sr[x];
}

int main() {
    scanf("%lld", &n);
    for (ll i = 1; i <= n; ++i) {
        scanf("%lld", &a[i]);
    }
    for (ll i = 1; i <= n; ++i) {
        scanf("%lld%lld", &l[i], &r[i]);
    }
    left(1);
    right(1);
    size(1);
    for (ll i = 1; i <= n; ++i) {
        if ((l[i] == -1 && r[i] == -1) || (l[i] != -1 && r[i] != -1 && sl[l[i]] == sr[r[i]])) {
            maxn = max(maxn, cnt[i]);
        }
    }
    printf("%lld", maxn);
    return 0;
}

悬关

2023/10/1 15:05
加载中...