Submission #50218488
Source Code Expand
#include <iostream>
#include <vector>
#include <unordered_map>
#include <atcoder/modint>
using namespace std;
using mint = atcoder::static_modint<998244353>;
int main(){
cin.tie(nullptr);
ios::sync_with_stdio(false);
int n;
cin >> n;
vector<int> a(n);
for(int i = 0; i < n; i++) cin >> a[i];
vector<vector<int>> g(n);
// グラフの作成
for(int i = 0; i < n - 1; i++){
int x, y;
cin >> x >> y;
x--, y--;
g[x].push_back(y);
g[y].push_back(x);
}
vector<unordered_map<int, mint>> D(n);
mint ans = 0;
// mpにキーがkである要素がある場合その値を, ない場合0を返す
auto get = [](unordered_map<int, mint> &mp, int k) -> mint {
auto itr = mp.find(k);
return itr == mp.end() ? 0 : itr->second;
};
// mpにキーがkである要素がある場合xを足す, ない場合xを追加
auto add = [](unordered_map<int, mint> &mp, int k, mint x) -> void {
auto itr = mp.find(k);
if(itr == mp.end()) mp.emplace(k, x);
else itr->second += x;
};
// 木dp
auto f = [&](auto &&f, int v, int p) -> void {
for(int c : g[v]){
if(c == p) continue;
f(f, c, v);
ans += get(D[c], a[v]); // (2)
// |D[v]| >= |D[c]|にする(マージテク)
if(D[v].size() < D[c].size()) D[v].swap(D[c]);
for(auto [color, cnt] : D[c]){
mint x = get(D[v], color);
mint y = cnt * x;
ans += y; // (3)
add(D[v], color, y + cnt);
}
}
ans++; // (1)
add(D[v], a[v], 1);
};
f(f, 0, -1);
cout << ans.val() << '\n';
}
Submission Info
| Submission Time | |
|---|---|
| Task | G - Leaf Color |
| User | tonegawa |
| Language | C++ 20 (gcc 12.2) |
| Score | 600 |
| Code Size | 1640 Byte |
| Status | AC |
| Exec Time | 178 ms |
| Memory | 65244 KiB |
Judge Result
| Set Name | Sample | All | ||||
|---|---|---|---|---|---|---|
| Score / Max Score | 0 / 0 | 600 / 600 | ||||
| Status |
|
|
| Set Name | Test Cases |
|---|---|
| Sample | 00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt |
| All | 00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt, 01_small_00.txt, 01_small_01.txt, 01_small_02.txt, 01_small_03.txt, 01_small_04.txt, 01_small_05.txt, 01_small_06.txt, 01_small_07.txt, 01_small_08.txt, 01_small_09.txt, 02_random_00.txt, 02_random_01.txt, 02_random_02.txt, 02_random_03.txt, 02_random_04.txt, 02_random_05.txt, 02_random_06.txt, 02_random_07.txt, 02_random_08.txt, 02_random_09.txt, 02_random_10.txt, 02_random_11.txt, 02_random_12.txt, 02_random_13.txt, 02_random_14.txt, 02_random_15.txt, 02_random_16.txt, 02_random_17.txt, 02_random_18.txt, 02_random_19.txt, 02_random_20.txt, 02_random_21.txt, 02_random_22.txt, 02_random_23.txt, 02_random_24.txt, 02_random_25.txt, 02_random_26.txt, 02_random_27.txt, 02_random_28.txt, 02_random_29.txt, 03_star_00.txt, 03_star_01.txt, 03_star_02.txt, 03_star_03.txt, 03_star_04.txt, 04_path_00.txt, 04_path_01.txt, 04_path_02.txt, 04_path_03.txt, 04_path_04.txt, 05_corner_00.txt, 05_corner_01.txt |
| Case Name | Status | Exec Time | Memory |
|---|---|---|---|
| 00_sample_00.txt | AC | 1 ms | 3540 KiB |
| 00_sample_01.txt | AC | 1 ms | 3408 KiB |
| 00_sample_02.txt | AC | 1 ms | 3484 KiB |
| 01_small_00.txt | AC | 1 ms | 3472 KiB |
| 01_small_01.txt | AC | 1 ms | 3472 KiB |
| 01_small_02.txt | AC | 1 ms | 3468 KiB |
| 01_small_03.txt | AC | 1 ms | 3552 KiB |
| 01_small_04.txt | AC | 1 ms | 3408 KiB |
| 01_small_05.txt | AC | 1 ms | 3336 KiB |
| 01_small_06.txt | AC | 1 ms | 3608 KiB |
| 01_small_07.txt | AC | 1 ms | 3432 KiB |
| 01_small_08.txt | AC | 1 ms | 3488 KiB |
| 01_small_09.txt | AC | 1 ms | 3480 KiB |
| 02_random_00.txt | AC | 82 ms | 33888 KiB |
| 02_random_01.txt | AC | 137 ms | 56108 KiB |
| 02_random_02.txt | AC | 169 ms | 57440 KiB |
| 02_random_03.txt | AC | 133 ms | 55008 KiB |
| 02_random_04.txt | AC | 65 ms | 31244 KiB |
| 02_random_05.txt | AC | 99 ms | 41548 KiB |
| 02_random_06.txt | AC | 144 ms | 56368 KiB |
| 02_random_07.txt | AC | 114 ms | 46912 KiB |
| 02_random_08.txt | AC | 93 ms | 41296 KiB |
| 02_random_09.txt | AC | 82 ms | 36308 KiB |
| 02_random_10.txt | AC | 151 ms | 57948 KiB |
| 02_random_11.txt | AC | 116 ms | 48052 KiB |
| 02_random_12.txt | AC | 13 ms | 8212 KiB |
| 02_random_13.txt | AC | 124 ms | 47692 KiB |
| 02_random_14.txt | AC | 166 ms | 61332 KiB |
| 02_random_15.txt | AC | 150 ms | 56344 KiB |
| 02_random_16.txt | AC | 104 ms | 43132 KiB |
| 02_random_17.txt | AC | 178 ms | 65244 KiB |
| 02_random_18.txt | AC | 85 ms | 37136 KiB |
| 02_random_19.txt | AC | 138 ms | 56068 KiB |
| 02_random_20.txt | AC | 14 ms | 9076 KiB |
| 02_random_21.txt | AC | 95 ms | 39244 KiB |
| 02_random_22.txt | AC | 84 ms | 36268 KiB |
| 02_random_23.txt | AC | 113 ms | 47432 KiB |
| 02_random_24.txt | AC | 21 ms | 12792 KiB |
| 02_random_25.txt | AC | 112 ms | 46332 KiB |
| 02_random_26.txt | AC | 119 ms | 48112 KiB |
| 02_random_27.txt | AC | 99 ms | 40652 KiB |
| 02_random_28.txt | AC | 15 ms | 9328 KiB |
| 02_random_29.txt | AC | 154 ms | 57072 KiB |
| 03_star_00.txt | AC | 95 ms | 54724 KiB |
| 03_star_01.txt | AC | 96 ms | 54696 KiB |
| 03_star_02.txt | AC | 102 ms | 54932 KiB |
| 03_star_03.txt | AC | 108 ms | 56000 KiB |
| 03_star_04.txt | AC | 100 ms | 54696 KiB |
| 04_path_00.txt | AC | 55 ms | 56860 KiB |
| 04_path_01.txt | AC | 84 ms | 58344 KiB |
| 04_path_02.txt | AC | 58 ms | 57156 KiB |
| 04_path_03.txt | AC | 80 ms | 54900 KiB |
| 04_path_04.txt | AC | 57 ms | 56864 KiB |
| 05_corner_00.txt | AC | 63 ms | 61708 KiB |
| 05_corner_01.txt | AC | 94 ms | 54700 KiB |