提出 #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 | ||||
| 結果 |
|
|
| セット名 | テストケース |
|---|---|
| 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 |