14752022-11-05 22:06:56peti1234Egyengetőcpp14Runtime error 0/1003ms3384 KiB
#include <bits/stdc++.h>

using namespace std;
const int c=1000005;
long long ans;
int n, koz, si[c], db[c];
vector<int> sz[c];
bitset<c> dp;
void dfs(int a) {
    si[a]=1;
    int maxi=0;
    for (auto x:sz[a]) {
        dfs(x);
        maxi=max(maxi, si[x]);
        si[a]+=si[x];
    }
    if (!koz && 2*si[a]>=n) {
        for (auto x:sz[a]) {
            db[si[x]]++;
        }
        if (a!=1) {
            db[n-si[a]]++;
        }
        ans+=n;
        koz=a;
    } else {
        ans+=min(si[a], n-maxi);
    }
}
int main()
{
    ios_base::sync_with_stdio(false);
    cin >> n;
    for (int i=2; i<=n; i++) {
        int x;
        cin >> x;
        sz[x].push_back(i);
    }
    dfs(1);
    dp[0]=1;
    for (int i=1; i<=n; i++) {
        while (db[i]>=3) {
            db[2*i]++;
            db[i]-=2;
        }
        for (int j=1; j<=db[i]; j++) {
            //cout << "fontos " << i << "\n";
            dp|=(dp<<i);
        }
    }
    for (long long ert=n/2; ert<=n; ert++) {
        if (dp[ert]) {
            ans+=ert*(n-1-ert);
            break;
        }
    }
    cout << ans << "\n";
    return 0;
}
SubtaskSumTestVerdictTimeMemory
subtask10/0
1Runtime error3ms1260 KiB
2Runtime error2ms1432 KiB
subtask20/20
3Runtime error2ms1604 KiB
4Runtime error2ms1728 KiB
5Runtime error2ms1728 KiB
6Runtime error2ms1976 KiB
7Runtime error2ms2256 KiB
8Runtime error2ms2332 KiB
subtask30/20
9Runtime error2ms2236 KiB
10Runtime error2ms2488 KiB
11Runtime error2ms2732 KiB
12Runtime error2ms2788 KiB
13Runtime error2ms2852 KiB
14Runtime error2ms3040 KiB
subtask40/20
15Runtime error2ms2840 KiB
16Runtime error2ms2980 KiB
17Runtime error2ms2844 KiB
18Runtime error2ms2912 KiB
19Runtime error2ms3036 KiB
20Runtime error2ms3168 KiB
subtask50/40
21Runtime error2ms3148 KiB
22Runtime error2ms3216 KiB
23Runtime error2ms3128 KiB
24Runtime error2ms3152 KiB
25Runtime error2ms3284 KiB
26Runtime error2ms3384 KiB