171822025-05-29 12:07:24AblablablaGyors utakcpp17Accepted 100/100342ms18856 KiB
#include <bits/stdc++.h>

using namespace std;

typedef long long ll;

vector<vector<ll>> csucsok;
vector<ll> tin, tout;
ll ido;

void dfs(ll akt){
    tin[akt] = ido;
    ido++;

    for(ll x : csucsok[akt]){
        dfs(x);
    }

    tout[akt] = ido;
    ido++;
}

struct segTree{
    ll meret = 1;
    vector<ll> fa;
    vector<bool> csere;

    void meretez(ll n){
        while(meret < n){
            meret *= 2;
        }

        fa.assign(2*meret - 1, 0);
        csere.assign(2*meret - 1, 0);
    }

    ll keres(ll a, ll b, ll ind, ll kezd, ll veg){
        if(veg < kezd){
            return 0;
        }
        if(veg < a || b < kezd){
            return 0;
        } else if(kezd <= a && b <= veg){
            return fa[ind];
        }

        ll k = (a + b) / 2;

        ll akt = keres(a, k, 2*ind +1, kezd, veg) + keres(k + 1, b, 2*ind + 2, kezd, veg);

        if(csere[ind]){
            akt = (b - a + 1) - akt;
        }

        return akt;
    }

    ll valt(ll a, ll b, ll ind, ll kezd, ll veg){
        if(veg < a || b < kezd){
            return fa[ind];
        } else if(kezd <= a && b <= veg){
            fa[ind] = (b - a + 1) - fa[ind];
            csere[ind] = !csere[ind];
            return fa[ind];
        }

        ll k = (a + b) / 2;

        fa[ind] = valt(a, k, 2*ind + 1, kezd, veg) + valt(k + 1, b, 2*ind + 2, kezd, veg);

        if(csere[ind]){
            fa[ind] = (b - a + 1) - fa[ind];
        }

        return fa[ind];
    }
};

int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);

    ll n, q;
    cin >> n >> q;

    csucsok.assign(n, vector<ll>());
    tin.assign(n, 0);
    tout.assign(n, 0);

    for(ll i = 1; i < n; i++){
        ll a;
        cin >> a;
        a--;

        csucsok[a].push_back(i);
    }

    dfs(0);

    segTree fa;
    fa.meretez(2*n);

    for(ll i = 1; i < n; i++){
        ll a;
        cin >> a;

        if(a){
            fa.valt(0, fa.meret - 1, 0, tin[i], tout[i]);
        }

    }

    ll ps = fa.fa[0]/2;
    ll pt = n - ps;

    cout << (ps*(ps - 1) + pt*(pt - 1))/2 << " ";

    while(q--){
        ll a;
        cin >> a;

        fa.valt(0, fa.meret - 1, 0, tin[a], tout[a]);

        ps = fa.fa[0]/2;
        pt = n - ps;
        cout << (ps*(ps - 1) + pt*(pt - 1))/2 << " ";
    }
    cout << "\n";
}
SubtaskSumTestVerdictTimeMemory
subtask10/0
1Accepted1ms316 KiB
2Accepted4ms824 KiB
subtask210/10
3Accepted1ms420 KiB
4Accepted2ms532 KiB
5Accepted1ms588 KiB
6Accepted1ms316 KiB
7Accepted1ms508 KiB
8Accepted1ms316 KiB
subtask311/11
9Accepted1ms420 KiB
10Accepted2ms532 KiB
11Accepted1ms588 KiB
12Accepted1ms316 KiB
13Accepted1ms508 KiB
14Accepted1ms316 KiB
15Accepted4ms696 KiB
16Accepted4ms644 KiB
17Accepted6ms568 KiB
18Accepted4ms564 KiB
19Accepted4ms656 KiB
20Accepted4ms548 KiB
21Accepted4ms692 KiB
22Accepted6ms772 KiB
23Accepted4ms564 KiB
24Accepted4ms568 KiB
subtask421/21
25Accepted310ms18856 KiB
26Accepted305ms18704 KiB
27Accepted342ms18832 KiB
28Accepted273ms18832 KiB
29Accepted335ms18740 KiB
30Accepted333ms18740 KiB
subtask524/24
31Accepted1ms500 KiB
32Accepted14ms1588 KiB
33Accepted104ms12340 KiB
34Accepted248ms14132 KiB
subtask634/34
35Accepted1ms420 KiB
36Accepted2ms532 KiB
37Accepted1ms588 KiB
38Accepted1ms316 KiB
39Accepted1ms508 KiB
40Accepted1ms316 KiB
41Accepted4ms696 KiB
42Accepted4ms644 KiB
43Accepted6ms568 KiB
44Accepted4ms564 KiB
45Accepted4ms656 KiB
46Accepted4ms548 KiB
47Accepted4ms692 KiB
48Accepted6ms772 KiB
49Accepted4ms564 KiB
50Accepted4ms568 KiB
51Accepted310ms18856 KiB
52Accepted305ms18704 KiB
53Accepted342ms18832 KiB
54Accepted273ms18832 KiB
55Accepted335ms18740 KiB
56Accepted333ms18740 KiB
57Accepted1ms500 KiB
58Accepted14ms1588 KiB
59Accepted104ms12340 KiB
60Accepted248ms14132 KiB
61Accepted230ms14388 KiB
62Accepted204ms13876 KiB
63Accepted216ms13972 KiB
64Accepted228ms13804 KiB
65Accepted237ms14700 KiB
66Accepted231ms14680 KiB
67Accepted279ms14640 KiB
68Accepted275ms14644 KiB
69Accepted197ms13288 KiB
70Accepted252ms14736 KiB
71Accepted209ms12992 KiB
72Accepted264ms14900 KiB
73Accepted238ms14904 KiB
74Accepted158ms13260 KiB
75Accepted272ms14552 KiB
76Accepted263ms14644 KiB
77Accepted204ms13620 KiB