Submission #54843426


Source Code Expand

#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define ld long double
#define fi first
#define se second
#define pb push_back
#pragma GCC optimize("unroll-loops,O3")
#pragma GCC target("avx2,bmi,bmi2,lzcnt,popcnt")
#define cok cout << (ok ? "YES\n" : "NO\n");
#define dbg(x) cout << (#x) << ": " << x << endl;
#define dbga(x,l,r) cout << (#x) << ": "; for (int ii=l;ii<r;ii++) cout << x[ii] << " "; cout << endl;
#define int long long
#define pi pair<int, int>
const int N = 1e6+9;
int n, ans, a[N], sz[N];
vector<int> vec[N];
map<int, pi> *mp[N];
int add[N];
void dfs(int v, int p = -1) {
    sz[v] = 1;
    pi mx = {-1, -1};
    for (int u: vec[v]) {
        if (u == p) continue;
        dfs(u, v);
        sz[v] += sz[u];
        mx = max(mx, pi{sz[u], u});
    }
    if (mx.se == -1) {
        mp[v] = new map<int, pi>;
        (*mp[v])[a[v]] = {1, 0};
        return;
    }
    mp[v] = mp[mx.se];
    add[v] = add[mx.se] + 1;
    ans += (*mp[v])[a[v]].se + (*mp[v])[a[v]].fi * add[v];
    // dbg(a[v]);
    // dbg((*mp[v])[a[v]].se + (*mp[v])[a[v]].fi * add[v]);
    (*mp[v])[a[v]].fi++;
    (*mp[v])[a[v]].se -= add[v];
    for (int u: vec[v]) {
        if (u == mx.se || u == p) continue;
        for (auto [color, para]: *mp[u]) {
            // dbg(color << " " << v + 1);
            // dbg(((*mp[v])[color].se + (*mp[v])[color].fi * add[v]) * (para.se + para.fi * (add[u] + 1)));
            ans += ((*mp[v])[color].se + (*mp[v])[color].fi * add[v]) * para.fi + (para.se + para.fi * (add[u] + 1)) * (*mp[v])[a[v]].fi;
        }
        for (auto [color, para]: *mp[u]) {
            (*mp[v])[color].fi += para.fi;
            (*mp[v])[color].se += para.se + para.fi * add[u] - para.fi * add[v];
        }
    }
    // dbg(v + 1);
    // dbg(ans);
}
signed main() {
    cin.tie(0); ios_base::sync_with_stdio(0);
    cin >> n;
    for (int i = 1; i < n; i++) {
        int a, b;
        cin >> a >> b;
        a--;b--;
        vec[a].pb(b);
        vec[b].pb(a);
    }
    for (int i = 0; i < n; i++) cin >> a[i];
    dfs(0);
    cout << ans;
}

Submission Info

Submission Time
Task G - Sum of Tree Distance
User polosatic
Language C++ 20 (gcc 12.2)
Score 0
Code Size 2142 Byte
Status WA
Exec Time 555 ms
Memory 133212 KiB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 0 / 600
Status
AC × 2
AC × 10
WA × 42
Set Name Test Cases
Sample 00_sample_01.txt, 00_sample_02.txt
All 00_sample_01.txt, 00_sample_02.txt, 01_test_01.txt, 01_test_02.txt, 01_test_03.txt, 01_test_04.txt, 01_test_05.txt, 01_test_06.txt, 01_test_07.txt, 01_test_08.txt, 01_test_09.txt, 01_test_10.txt, 01_test_11.txt, 01_test_12.txt, 01_test_13.txt, 01_test_14.txt, 01_test_15.txt, 01_test_16.txt, 01_test_17.txt, 01_test_18.txt, 01_test_19.txt, 01_test_20.txt, 01_test_21.txt, 01_test_22.txt, 01_test_23.txt, 01_test_24.txt, 01_test_25.txt, 01_test_26.txt, 01_test_27.txt, 01_test_28.txt, 01_test_29.txt, 01_test_30.txt, 01_test_31.txt, 01_test_32.txt, 01_test_33.txt, 01_test_34.txt, 01_test_35.txt, 01_test_36.txt, 01_test_37.txt, 01_test_38.txt, 01_test_39.txt, 01_test_40.txt, 01_test_41.txt, 01_test_42.txt, 01_test_43.txt, 01_test_44.txt, 01_test_45.txt, 01_test_46.txt, 01_test_47.txt, 01_test_48.txt, 01_test_49.txt, 01_test_50.txt
Case Name Status Exec Time Memory
00_sample_01.txt AC 5 ms 3496 KiB
00_sample_02.txt AC 5 ms 3436 KiB
01_test_01.txt WA 85 ms 23356 KiB
01_test_02.txt WA 265 ms 61008 KiB
01_test_03.txt WA 346 ms 78640 KiB
01_test_04.txt WA 95 ms 26288 KiB
01_test_05.txt WA 54 ms 16380 KiB
01_test_06.txt WA 384 ms 85292 KiB
01_test_07.txt WA 153 ms 38764 KiB
01_test_08.txt WA 129 ms 41080 KiB
01_test_09.txt WA 112 ms 40548 KiB
01_test_10.txt WA 119 ms 44236 KiB
01_test_11.txt WA 158 ms 44824 KiB
01_test_12.txt WA 152 ms 44212 KiB
01_test_13.txt WA 166 ms 48036 KiB
01_test_14.txt WA 180 ms 46928 KiB
01_test_15.txt WA 139 ms 51616 KiB
01_test_16.txt WA 292 ms 76900 KiB
01_test_17.txt WA 260 ms 72324 KiB
01_test_18.txt WA 214 ms 66352 KiB
01_test_19.txt WA 149 ms 57720 KiB
01_test_20.txt WA 212 ms 66116 KiB
01_test_21.txt WA 109 ms 36604 KiB
01_test_22.txt WA 134 ms 42476 KiB
01_test_23.txt WA 391 ms 84720 KiB
01_test_24.txt WA 383 ms 81988 KiB
01_test_25.txt WA 341 ms 73652 KiB
01_test_26.txt WA 97 ms 34044 KiB
01_test_27.txt WA 151 ms 40688 KiB
01_test_28.txt WA 404 ms 84256 KiB
01_test_29.txt WA 428 ms 93036 KiB
01_test_30.txt WA 431 ms 91360 KiB
01_test_31.txt AC 96 ms 58212 KiB
01_test_32.txt AC 83 ms 58212 KiB
01_test_33.txt AC 97 ms 58212 KiB
01_test_34.txt AC 85 ms 58172 KiB
01_test_35.txt WA 86 ms 45648 KiB
01_test_36.txt WA 96 ms 45576 KiB
01_test_37.txt WA 130 ms 45500 KiB
01_test_38.txt WA 108 ms 45648 KiB
01_test_39.txt WA 136 ms 45584 KiB
01_test_40.txt WA 133 ms 45508 KiB
01_test_41.txt AC 209 ms 70712 KiB
01_test_42.txt AC 204 ms 70712 KiB
01_test_43.txt AC 191 ms 64388 KiB
01_test_44.txt AC 242 ms 64384 KiB
01_test_45.txt WA 555 ms 133212 KiB
01_test_46.txt WA 553 ms 125376 KiB
01_test_47.txt WA 422 ms 92672 KiB
01_test_48.txt WA 403 ms 87016 KiB
01_test_49.txt WA 485 ms 105544 KiB
01_test_50.txt WA 457 ms 97848 KiB