結果
問題 | No.2949 Product on Tree |
ユーザー | zawakasu |
提出日時 | 2024-10-25 22:05:06 |
言語 | C++17 (gcc 12.3.0 + boost 1.83.0) |
結果 |
AC
|
実行時間 | 289 ms / 2,000 ms |
コード長 | 1,942 bytes |
コンパイル時間 | 916 ms |
コンパイル使用メモリ | 88,060 KB |
実行使用メモリ | 43,064 KB |
最終ジャッジ日時 | 2024-10-25 22:06:00 |
合計ジャッジ時間 | 13,628 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge5 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 2 ms
6,820 KB |
testcase_01 | AC | 2 ms
6,816 KB |
testcase_02 | AC | 2 ms
6,820 KB |
testcase_03 | AC | 217 ms
16,284 KB |
testcase_04 | AC | 196 ms
16,080 KB |
testcase_05 | AC | 202 ms
16,412 KB |
testcase_06 | AC | 201 ms
16,404 KB |
testcase_07 | AC | 195 ms
16,100 KB |
testcase_08 | AC | 234 ms
16,888 KB |
testcase_09 | AC | 217 ms
17,288 KB |
testcase_10 | AC | 223 ms
18,292 KB |
testcase_11 | AC | 211 ms
19,364 KB |
testcase_12 | AC | 212 ms
23,968 KB |
testcase_13 | AC | 229 ms
24,876 KB |
testcase_14 | AC | 225 ms
28,168 KB |
testcase_15 | AC | 257 ms
32,336 KB |
testcase_16 | AC | 289 ms
28,792 KB |
testcase_17 | AC | 229 ms
30,060 KB |
testcase_18 | AC | 237 ms
29,700 KB |
testcase_19 | AC | 249 ms
33,708 KB |
testcase_20 | AC | 239 ms
32,576 KB |
testcase_21 | AC | 248 ms
33,008 KB |
testcase_22 | AC | 231 ms
35,368 KB |
testcase_23 | AC | 200 ms
16,640 KB |
testcase_24 | AC | 218 ms
16,624 KB |
testcase_25 | AC | 196 ms
16,504 KB |
testcase_26 | AC | 205 ms
16,564 KB |
testcase_27 | AC | 213 ms
16,792 KB |
testcase_28 | AC | 228 ms
17,016 KB |
testcase_29 | AC | 210 ms
17,480 KB |
testcase_30 | AC | 212 ms
18,420 KB |
testcase_31 | AC | 221 ms
20,472 KB |
testcase_32 | AC | 221 ms
21,340 KB |
testcase_33 | AC | 244 ms
27,864 KB |
testcase_34 | AC | 248 ms
35,848 KB |
testcase_35 | AC | 245 ms
30,452 KB |
testcase_36 | AC | 263 ms
38,712 KB |
testcase_37 | AC | 262 ms
39,440 KB |
testcase_38 | AC | 263 ms
33,904 KB |
testcase_39 | AC | 262 ms
34,772 KB |
testcase_40 | AC | 269 ms
42,316 KB |
testcase_41 | AC | 248 ms
37,396 KB |
testcase_42 | AC | 263 ms
43,064 KB |
testcase_43 | AC | 64 ms
14,940 KB |
testcase_44 | AC | 65 ms
15,008 KB |
testcase_45 | AC | 84 ms
18,372 KB |
testcase_46 | AC | 75 ms
16,796 KB |
testcase_47 | AC | 55 ms
13,200 KB |
testcase_48 | AC | 77 ms
17,328 KB |
ソースコード
#include <iostream> #include <iomanip> #include <cassert> #include <vector> const long long MOD{998244353}; long long add(long long L, long long R) { L += R; if (L >= MOD) L -= MOD; return L; } long long inv_plus(long long v) { return (v == 0 ? 0LL : MOD - v); } long long sub(long long L, long long R) { return add(L, inv_plus(R)); } long long mult(long long L, long long R) { return (L * R) % MOD; } long long div2(long long v) { static long long inv{499122177}; assert(mult(inv, 2) == 1); return mult(v, inv); } int main() { std::cin.tie(nullptr)->sync_with_stdio(false); int N; std::cin >> N; std::vector<int> A(N); for (auto& a : A) std::cin >> a; std::vector<std::vector<int>> g(N); for (int i{} ; i < N - 1 ; i++) { int u, v; std::cin >> u >> v; u--; v--; g[u].push_back(v); g[v].push_back(u); } std::vector<long long> dp(N); auto dfs{[&](auto dfs, int v, int p) -> long long { for (auto x : g[v]) if (x != p) { dp[v] = add(dp[v], mult(dfs(dfs, x, v), A[v])); } dp[v] = add(dp[v], A[v]); return dp[v]; }}; dfs(dfs, 0, -1); long long ans{}; auto dfs2{[&](auto dfs, int v, int p, long long propa) -> void { std::vector<long long> ch(g[v].size()); long long sum{}; for (int i{} ; i < (int)g[v].size() ; i++) { ch[i] = g[v][i] == p ? propa : dp[g[v][i]]; ch[i] = mult(ch[i], A[v]); sum = add(sum, ch[i]); } sum = add(sum, A[v]); ans = add(ans, sum); for (int i{} ; i < (int)g[v].size() ; i++) { sum = sub(sum, ch[i]); if (g[v][i] != p) dfs(dfs, g[v][i], v, sum); sum = add(sum, ch[i]); } }}; dfs2(dfs2, 0, -1, 0LL); for (auto a : A) ans = sub(ans, a); ans = div2(ans); std::cout << ans << '\n'; }