提出 #54869847


ソースコード 拡げる

#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];
    (*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]) {
            // if ((*mp[v]).find(color) == (*mp[v]).end()) continue;
            ans += ((*mp[v])[color].se + (*mp[v])[color].fi * add[v]) * para.fi + (para.se + para.fi * (add[u] + 1)) * (*mp[v])[color].fi;        }
        for (auto [color, para]: *mp[u]) {
            (*mp[v])[color].fi += para.fi;
            (*mp[v])[color].se += para.se + para.fi * (add[u] + 1) - para.fi * add[v];
        }
    }
}
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;
}

提出情報

提出日時
問題 G - Sum of Tree Distance
ユーザ polosatic
言語 C++ 20 (gcc 12.2)
得点 600
コード長 1945 Byte
結果 AC
実行時間 583 ms
メモリ 133316 KiB

ジャッジ結果

セット名 Sample All
得点 / 配点 0 / 0 600 / 600
結果
AC × 2
AC × 52
セット名 テストケース
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
ケース名 結果 実行時間 メモリ
00_sample_01.txt AC 5 ms 3424 KiB
00_sample_02.txt AC 5 ms 3452 KiB
01_test_01.txt AC 85 ms 23284 KiB
01_test_02.txt AC 270 ms 60836 KiB
01_test_03.txt AC 359 ms 78560 KiB
01_test_04.txt AC 97 ms 26416 KiB
01_test_05.txt AC 57 ms 16492 KiB
01_test_06.txt AC 387 ms 85268 KiB
01_test_07.txt AC 153 ms 38716 KiB
01_test_08.txt AC 103 ms 40448 KiB
01_test_09.txt AC 113 ms 39984 KiB
01_test_10.txt AC 134 ms 43352 KiB
01_test_11.txt AC 166 ms 44332 KiB
01_test_12.txt AC 157 ms 43888 KiB
01_test_13.txt AC 193 ms 47192 KiB
01_test_14.txt AC 187 ms 46112 KiB
01_test_15.txt AC 176 ms 51436 KiB
01_test_16.txt AC 289 ms 76872 KiB
01_test_17.txt AC 255 ms 72256 KiB
01_test_18.txt AC 220 ms 66328 KiB
01_test_19.txt AC 165 ms 57576 KiB
01_test_20.txt AC 212 ms 66044 KiB
01_test_21.txt AC 98 ms 36560 KiB
01_test_22.txt AC 114 ms 42320 KiB
01_test_23.txt AC 395 ms 84604 KiB
01_test_24.txt AC 379 ms 81924 KiB
01_test_25.txt AC 334 ms 73416 KiB
01_test_26.txt AC 93 ms 33980 KiB
01_test_27.txt AC 122 ms 40576 KiB
01_test_28.txt AC 398 ms 84276 KiB
01_test_29.txt AC 437 ms 93048 KiB
01_test_30.txt AC 436 ms 91432 KiB
01_test_31.txt AC 82 ms 55088 KiB
01_test_32.txt AC 86 ms 54976 KiB
01_test_33.txt AC 82 ms 55032 KiB
01_test_34.txt AC 84 ms 55024 KiB
01_test_35.txt AC 80 ms 45440 KiB
01_test_36.txt AC 82 ms 45436 KiB
01_test_37.txt AC 112 ms 45496 KiB
01_test_38.txt AC 103 ms 45432 KiB
01_test_39.txt AC 125 ms 45504 KiB
01_test_40.txt AC 117 ms 45436 KiB
01_test_41.txt AC 209 ms 67404 KiB
01_test_42.txt AC 226 ms 67524 KiB
01_test_43.txt AC 191 ms 61264 KiB
01_test_44.txt AC 192 ms 61280 KiB
01_test_45.txt AC 583 ms 133316 KiB
01_test_46.txt AC 562 ms 125188 KiB
01_test_47.txt AC 416 ms 92612 KiB
01_test_48.txt AC 405 ms 86932 KiB
01_test_49.txt AC 481 ms 105480 KiB
01_test_50.txt AC 474 ms 97848 KiB