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
AC × 3
AC × 55
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